Как мы все знаем, сейчас есть все больше и больше методов, чтобы анализировать XML, но есть только четыре основных метода, а именно: DOM, SAX, JDOM и DOM4J
Ниже приведено первое, что дает адрес загрузки пакета JAR для этих четырех методов
DOM: он входит в текущий Java JDK, в пакете xml-apis.jar
Sax: http://sourceforge.net/projects/sax/
JDom: http://jdom.org/downloads/index.html
Dom4j: http://sourceforge.net/projects/dom4j//
1. Введение и анализ преимуществ и недостатков
1. Dom (модель объекта документа)
DOM является официальным стандартом W3C для представления XML-документов в зависимости от платформы и языка. DOM - это набор узлов или информационных фрагментов, организованных в иерархии. Эта иерархия позволяет разработчикам искать конкретную информацию на дереве. Анализ этой структуры обычно требует загрузки всего документа и построения иерархии, прежде чем какая -либо работа будет выполнена. Поскольку он основан на уровне информации, DOM считается на основе деревьев или объекта.
【преимущество】
① Позвольте приложениям вносить изменения в данные и структуру.
② Доступ к двунаправлению, и вы можете в любое время перемещаться по дереву вверх и вниз, получать и управлять любой частью данных.
【Недостаток】
① Обычно весь XML -документ должен быть загружен для построения иерархии, которая потребляет много ресурсов.
2. Sax (простой API для XML)
Преимущества обработки SAX очень похожи на преимущества потоковой передачи. Анализ может начать немедленно, вместо того, чтобы ждать обработки всех данных. И, поскольку приложение проверяет данные только при его чтении, ему не нужно хранить данные в памяти. Это огромное преимущество для больших документов. На самом деле, приложение даже не должно проанализировать весь документ; Это может остановить анализ, когда определенное состояние будет выполнено. Вообще говоря, саксофон намного быстрее, чем его замена DOM.
Выберите Dom или Sax? Для разработчиков, которым необходимо написать свой собственный код для обработки документов XML, выбор модели DOM или Sax Saxing - очень важное решение для дизайна. DOM использует метод создания структуры дерева для доступа к документам XML, в то время как Sax использует модель события.
Диаграмм DOM преобразует XML -документ в дерево, содержащее его содержимое и может пройти по дереву. Преимущество анализа модели с DOM заключается в том, что ее легко программировать. Разработчики должны только позвонить в инструкции по производству деревьев, а затем использовать API навигации для доступа к необходимым узлам деревьев, чтобы выполнить задачу. Это легко добавить и изменить элементы в дереве. Однако, поскольку весь документ XML должен обрабатывать при использовании анализатора DOM, требования к производительности и памяти относительно высоки, особенно при столкновении с большими файлами XML. Из -за своих возможностей прохождения анализаторов DOM часто используются в услугах, где документы XML требуют частых изменений.
Sax Parser принимает модель на основе событий. Это может вызвать серию событий при анализе документа XML. Когда найден заданный тег, он может активировать метод обратного вызова, чтобы сообщить методу, что тег был найден. Sax обычно требует низкой памяти, потому что он позволяет разработчикам решать теги, которые они хотят обрабатывать. Особенно, когда разработчикам необходимо обрабатывать часть данных, содержащихся в документе, способность к расширению Sax лучше отражается. Тем не менее, кодирование сложно при использовании Sax Parser, и трудно получить доступ к нескольким различным данным в одном и том же документе одновременно.
【Преимущества】
① Нет необходимости ждать обработки всех данных, и анализ может начаться немедленно.
② Проверьте данные только при чтении данных, и не нужно сохранять в памяти.
③ Вы можете остановить анализ, когда выполняется определенное условие, не проанализируя весь документ.
④ Высокая эффективность и производительность, и может анализировать документы, превышающие системную память.
【Недостаток】
① Приложение должно нести ответственность за логику обработки тега (например, поддержание отношений между родителями/ребенком и т. Д.), Чем сложнее документ, тем сложнее программа.
② Односторонняя навигация не может найти иерархию документа, и трудно одновременно получить доступ к различным частям данных одного и того же документа и не поддерживает XPath.
3. Jdom (объектная модель документа на основе Java)
Цель JDOM-быть моделью документов, специфичной для Java, которая упрощает взаимодействие с XML и быстрее, чем использование DOM. Поскольку это первая модель, специфичная для Java, JDOM активно продвигается и продвигается. Учитывая, что в конечном итоге используется его в качестве «стандартного расширения Java» через «запрос спецификации Java JSR-102». JDOM Development началась с начала 2000 года.
JDom и Dom в основном различаются в двух аспектах. Во -первых, JDom использует только бетонные классы, а не интерфейсы. Это упрощает API в некотором смысле, но также ограничивает гибкость. Во -вторых, API использует большое количество классов коллекций, упрощая использование разработчиков Java, которые уже знакомы с этими классами.
В документации JDOM говорится, что ее цель состоит в том, чтобы «использовать 20% (или меньше) усилий для решения 80% (или более) задач Java/XML» (предполагается как 20% на основе кривой обучения). JDOM, конечно, полезен для большинства приложений Java/XML, и большинство разработчиков считают API гораздо проще для понимания, чем DOM. JDOM также включает в себя довольно обширные проверки поведения программы, чтобы пользователи не могли делать что -либо бессмысленное в XML. Тем не менее, это все еще требует, чтобы вы полностью понимали XML, чтобы сделать что -то за пределами оснований (или даже понять ошибки в некоторых случаях). Это может быть более значимой работой, чем изучение интерфейса DOM или JDOM.
Сам JDom не содержит анализатора. Обычно он использует анализатор SAX2 для разбора и проверки входных XML -документов (хотя он также может принимать ранее построенные представления DOM в качестве входных данных). Он содержит некоторые преобразователи для вывода представлений JDom в потоки событий SAX2, модели DOM или текстовые документы XML. JDOM открыт с открытым исходным кодом в рамках варианта лицензии Apache.
【преимущество】
① Используйте бетонные классы вместо интерфейсов, упрощая DOM API.
② Большое количество классов сбора Java используется для облегчения разработчиков Java.
【Недостаток】
① Нет хорошей гибкости.
② Плохая производительность.
4. dom4j (модель объекта документа для Java)
Хотя DOM4J представляет собой совершенно независимый результат развития, первоначально это была интеллектуальная ветвь JDOM. Он включает в себя множество функций за пределами основных представлений о документах XML, включая интегрированную поддержку XPath, поддержку схемы XML и обработку на основе событий для больших или потоковых документов. Он также предоставляет возможность создать представление документа, которое имеет параллельный доступ через API DOM4J и стандартный интерфейс DOM. Это было в стадии разработки со второй половины 2000 года.
Чтобы поддержать все эти функции, DOM4J использует интерфейсы и абстрактные методы базового класса. DOM4J широко использует класс коллекций в API, но во многих случаях он также предоставляет некоторые альтернативы, чтобы обеспечить лучшую производительность или более простой метод кодирования. Прямая выгода заключается в том, что, хотя DOM4J платит цену более сложного API, он обеспечивает гораздо большую гибкость, чем JDOM.
При добавлении гибкости, интеграции XPath и целей обработки больших документов DOM4J - это то же самое, что и JDOM: простота использования и интуитивная работа для разработчиков Java. Он также стремится стать более полным решением, чем JDom, достигая цели решения всех проблем Java/XML в природе. При достижении этой цели он подчеркивает меньший акцент на предотвращении неверного поведения применения, чем JDom.
DOM4J - очень, очень отличный API Java XML, с отличной производительностью, мощными функциями и чрезвычайно простыми в использовании. Это также программное обеспечение с открытым исходным кодом. В настоящее время вы можете видеть, что все больше и больше программного обеспечения Java используют DOM4J для чтения и написания XML. Особенно стоит отметить, что даже JAXM Sun использует DOM4J.
【преимущество】
① Класс сбора Java широко используется для облегчения разработчиков Java и предоставления некоторых альтернативных методов для повышения производительности.
Apport xpath.
③ Это хорошая производительность.
【Недостаток】
① Интерфейс широко используется, а API относительно сложный.
2. Сравнение
1. Dom4j обладает лучшим результатом, и даже Sun's Jaxm использует DOM4J. В настоящее время многие проекты с открытым исходным кодом используют DOM4J в больших количествах, такие как знаменитый Hibernate, также использует DOM4J для чтения файлов конфигурации XML. Если переносимость не учитывается, то DOM4J используется.
2. JDom и DOM плохо работают во время тестирования производительности, переполнены памяти при тестировании 10M документов, но портативные. Также стоит подумать о Доме и Джейдо в случае небольшой документации. В то время как разработчики JDOM заявили, что они рассчитывают сосредоточиться на проблемах производительности до официального выпуска, с точки зрения производительности, это на самом деле не рекомендуется. Кроме того, DOM по -прежнему очень хороший выбор. Реализация DOM широко используется в различных языках программирования. Это также является основой многих других связанных с XML стандартов, так как это официально рекомендации W3C (в отличие от нестандартных моделей Java), так что это может потребоваться и в некоторых типах проектов (например, использование DOM в JavaScript).
3. Sax работает лучше, что зависит от его конкретного метода анализа - управляемого событиями. SAX обнаруживает предстоящий поток XML, но не загружается в память (конечно, когда прочитал поток XML, некоторые документы будут временно скрыты в памяти).
Мое мнение: если документ XML большой и не рассматривает проблемы с переносимостью, рекомендуется использовать DOM4J; Если документ XML невелик, рекомендуется использовать JDom; Если его необходимо обрабатывать во времени без сохранения данных, рекомендуется рассмотреть SAX. Но несмотря ни на что, то же предложение: лучшее - это правильная вещь. Если позволяет время, рекомендуется попробовать эти четыре метода и выбрать один, который вам подходит.
Iii. Пример
Чтобы сохранить пространство, эти четыре метода и различия в создании документов XML здесь не даются здесь. Приведен только код для анализа документов XML. Если требуется полный проект (строительство XML -документов + сравнение тестирования XML +).
Вот следующий контент XML в качестве примера для анализа:
<?xml version="1.0" encoding="UTF-8"?><users> <user id="0"> <name>Alexia</name> <age>23</age> <sex>Female</sex> </user> <user id="1"> <name>Edward</name> <age>24</age> <sex>Male</sex> </user> <user id="2"> <name>wjm</name> <Age> 23 </AGE> <Ses> женщина </sex> </user> <user id = "3"> <mame> wh </name> <Age> 24 </age> <ses> </sex> </user> </users>
Сначала определите интерфейс для анализа документов XML:
/*** @author Alexia** Определите интерфейс для xml документа.
1. Пример DOM
Пакет com.xml; импорт java.io.filenotfoundexception; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.printwriter; import javax.xml.parsers.documentbuilder; импорт javax.xml.parsers.documentbuilbrectory; javax.xml.parsers.parserconfigurationexception; import javax.xml.transform.outputkeys; import javax.xml.transform.transformer; import javax.xml.transform.transformonfigurationexception; import javax.xml.transform.transformerexcection; javax.xml.transform.transformerfactory; import javax.xml.transform.dom.domsource; импорт javax.xml.transform.stream.streamresult; импорт org.w3c.dom.document; import org.w3c.dom.element; импорт org.w3c.dom. org.xml.sax.saxexception;/** * @author alexia * * dom parsing xml документ */public class domdemo реализует Xmldocument {Private Document Document; public void parserxml (String filename) {try {documentBuilderFactory dbf = documentBuilderFactory.newinStance (); DocumentBuilder db = dbf.newdocumentbuilder (); Документ документ = db.parse (имя файла); Nodelist users = document.getChildNodes (); for (int i = 0; i <users.getLength (); i ++) {node user = user.item (i); Nodelist userInfo = user.getChildNodes (); for (int j = 0; j <userInfo.getLength (); j ++) {node node = userInfo.item (j); Nodelist usermeta = node.getChildNodes (); for (int k = 0; k <usermeta.getlength (); k ++) {if (usermeta.item (k) .getnodeName ()! = "#Text") System.out.println (userMeta.Item (k) .getNodEname () + ":" + usermeta.Item (k) .GigleTextContent (); } System.out.println (); }}} catch (filenotfoundexception e) {e.printstacktrace (); } catch (parserconfigurationexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); }}} 2. Пример SAX
пакет com.xml; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.inputstream; импорт java.io.outputstream; import.io.io.io. javax.xml.parsers.parserconfigurationexception; import javax.xml.parsers.saxparser; import javax.xml.parsers.saxparserfactory; import javax.xml.transform.outputkeys; import javax.xml.transform.result; javax.xml.transform.transformerconfigurationexception; import javax.xml.transform.sax.saxtransformererfactory; import javax.xml.transform.sax.transformerhandler; import.xml.transform.stream.streamResult; импорт org.xml.s.sml.transform.stream.streamResult; импорт org.x.sax.s.sml.transform.stream.streamResult; org.xml.sax.saxexception; import org.xml.sax.helpers.attributeimpl; import org.xml.sax.helpers.defaulthandler;/** * @author alexia * * sax parsing xml document */public class saxdemo xmldocument uspoide pars SAXPARSERFACTORY SAXFAC = SAXPARSERFACTORY.NEWINSTANCE (); try {saxparser saxparser = saxfac.newsaxparser (); InputStream IS = new FileInputStream (имя файла); saxparser.parse (is, new mysaxhandler ()); } catch (parserconfigurationexception e) {e.printstacktrace (); } catch (saxexception e) {e.printstacktrace (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }}} класс MySaxHandler Extends Delaulthandler {boolean hasattribute = false; Атрибуты атрибуты = null; public void startDocument () Throws SaxException {// System.out.println («Документ начал печать»); } public void endDocument () Throws SaxException {// System.out.println («Документ закончил печать»); } public void StartElement (String URI, строка LocalName, String Qname, атрибуты атрибутов) бросает SaxException {if (qname.equals ("users")) {return; } if (qname.equals ("user")) {return; } if (attributes.getLength ()> 0) {this.attributes = attributes; this.hasattribute = true; }} public void endelement (String uri, String LocalName, String QName) Throws SaxException {if (hasatTribute && (attributes! = null)) {for (int i = 0; i <attributes.getLength (); i ++) {System.out.print (attributes.getQname (0) + ":" + attribute. doot.rut.rut.rattue. }}} public void символы (char [] ch, int start, int length) throws saxexception {system.out.print (new String (ch, start, length)); }} 3. JDOM. Пример
пакет com.xml; импорт java.io.filenotfoundexception; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.util.list; импорт org.jdom2.document; импорт org.jdom2.element; импорт org.jdom2.jdomexcept org.jdom2.output.xmloutputter;/** * @author Alexia * * Jdom Parsing XML Documents * */Public Class Jdomdemo реализует Xmldocument {public void parserxml (String filename) {Saxbuilder builder = new Saxbuilder (); try {document document = builder.build (имя файла); Element users = document.getrootelement (); Список пользовательских list = users.getChildren ("user"); для (int i = 0; i <userlist.size (); i ++) {element user = (element) userlist.get (i); Список userInfo = user.getChildren (); for (int j = 0; j <userinfo.size (); j ++) {System.out.println (((элемент) userinfo.get (j)). getName () + ":" + ((element) userInfo.get (j)). getValue ()); } System.out.println (); }} catch (jdomexception e) {e.printstacktrace (); } catch (ioException e) {e.printstackTrace (); }}} 4. Пример DOM4J
пакет com.xml; импорт java.io.file; импорт java.io.filewriter; импорт java.io.ioexception; импорт java.io.writer; импорт java.util.iterator; импорт org.dom4j.document; import.dom4j.documentexception; импорт org.dom.documentper; org.dom4j.io.saxreader; import org.dom4j.io.xmlwriter;/** * @author alexia * * dom4j parse xml документ */public class dom4jdemo реализует xmldocument {public void parserxml (String filename) {filexml = new File (filename); SaxReader SaxReader = new SaxReader (); try {document document = saxreader.read (inputxml); Element users = document.getrootelement (); for (iterator i = users.elementiterator (); for (iterator j = user.elementiterator (); j.hasnext ();) {element node = (element) j.next (); System.out.println (node.getName () + ":" + node.getText ()); } System.out.println (); }} catch (documentException e) {System.out.println (e.getMessage ()); }}}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.