1. Дом (Jaxp Crimson Palser)
DOM является официальным стандартом W3C для представления XML-документов в зависимости от платформы и языка. DOM - это набор узлов или информационных фрагментов, организованных в иерархии. Эта иерархия позволяет разработчикам искать конкретную информацию на дереве. Анализ этой структуры обычно требует загрузки всего документа и построения иерархии, прежде чем какая -либо работа будет выполнена. Поскольку он основан на уровне информации, DOM считается на основе деревьев или объекта. DOM и обобщенная обработка на основе деревьев имеют несколько преимуществ. Во -первых, поскольку дерево постоянно в памяти, оно может быть изменено, чтобы приложение могло вносить изменения в данные и структуру. Это также позволяет вам в любое время перемещаться по дереву вверх и вниз, а не на одноразовую работу, такую как саксофон. DOM намного проще в использовании.
2. Сакс
Преимущества обработки 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, и трудно получить доступ к нескольким различным данным в одном и том же документе одновременно.
3. Jdom http://www.jdom.org
Цель 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.
4. dom4j http://dom4j.sourceforge.net
Хотя 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.
Сравнение четырех методов
Dom4J обладает лучшим исполнением, и даже JAXM Sun использует DOM4J. В настоящее время многие проекты с открытым исходным кодом используют DOM4J в больших количествах, такие как знаменитый Hibernate, также использует DOM4J для чтения файлов конфигурации XML. Если переносимость не учитывается, то DOM4J используется.
JDom и DOM плохо работают во время тестирования производительности, переполнены памяти при тестировании 10M документов. Также стоит подумать о Доме и Джейдо в случае небольшой документации. В то время как разработчики JDOM заявили, что они рассчитывают сосредоточиться на проблемах производительности до официального выпуска, с точки зрения производительности, это на самом деле не рекомендуется. Кроме того, DOM по -прежнему очень хороший выбор. Реализация DOM широко используется в различных языках программирования. Это также является основой многих других связанных с XML стандартов, так как это официально рекомендации W3C (в отличие от нестандартных моделей Java), так что это может потребоваться и в некоторых типах проектов (например, использование DOM в JavaScript).
SAX работает лучше, что зависит от его конкретного метода анализа - управляемого событиями. SAX обнаруживает предстоящий поток XML, но не загружается в память (конечно, когда прочитал поток XML, некоторые документы будут временно скрыты в памяти).
Основное использование четырех методов работы XML
XML -файл:
<? XML версия = "1.0" Encoding = "gb2312"?> < Результат> < Значение> < Нет> a1234 </no> < addr> № XX Секция XX Road, XX Town, округ XX, Sichuan Province </addr> < value> < value> < no> < addr> xx vello Провинция </addr> </value> </результат >
1) Метод реализации DOM
Импорт java.io.*; импортировать java.util.*; import org.w3c.dom.*; импортировать javax.xml.parsers.*; public class myxmlreader {public static void main (string arge []) {long lasting = system.currenttimillis (); try {file f = new File ("data_10k.xml"); DocumentBuilderFactory Factory = DocumentBuilderFactory.newinStance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); Документ doc = builder.parse (f); Nodelist nl = doc.getElementsbytagname ("value"); for (int i = 0; i < nl.getLength (); i ++) {System.out.print ("номер номерного знака:"+doc.getElementsbytagname ("no"). item (i) .getfirstchild (). getNodevalue ()); System.out.println («Адрес владельца:» + doc.getelementsbytagname ("addr"). Item (i) .getfirstchild (). GetNoDevalue ()); }} catch (Exception e) {e.printstackTrace ();} 2) Метод реализации SAX
Импорт org.xml.sax.*; import org.xml.sax.helpers.*; импорт javax.xml.parsers.*; открытый класс myxmlreader расширяет Delaulthandler {java.util.stack Tags = new Java.Util.Stack (); public myxmlReader () {super ();} public static void main (String args []) {long lasting = System.currentTimeMiMillis (); try {saxparserfactory sf = saxparserfactory.newinstance (); SAXPARSER SP = SF.NEWSAXPARSER (); Myxmlreader reader = new myxmlreader (); sp.parse (новый inputsource ("data_10k.xml"), reader); } catch (Exception e) {e.printstackTrace (); } System.out.println ("время выполнения:" + (system.currenttimemillis () - lasting) + "milliseconds");} public void символы (char ch [], int start, int length) throws saxexception {string tag = (string) tags.peek (); if (tag.equals ("no")) {system.out.print ("номер номерного знака:" + new String (ch, start, length));} if (tag.equals ("addr")) {system.out.println ("Адрес:" + new String (chard, length));}} public vestElem tags.push (qname);}} 3) Метод реализации JDOM
Импорт java.io.*; import java.util.*; import org.jdom.*; import org.jdom.input.*; try {saxbuilder builder = new saxbuilder (); Документ doc = builder.build (новый файл ("data_10k.xml")); Element foo = doc.getrootelement (); Список allChildren = foo.getChildren (); for (int i = 0; i < allchildren.size (); i ++) {System.out.print ("номер номерного знака:"+((элемент) allChildren.get (i)). getChild ("Нет"). getText ()); System.out.println («Адрес владельца:» + ((элемент) allchildren.get (i)). GetChild ("addr"). GetText ()); }} catch (Exception e) {e.printstacktrace ();}} 4) Метод реализации DOM4J
Импорт java.io.*; import java.util.*; import org.dom4j.*; import org.dom4j.io.*; try {file f = new File ("data_10k.xml"); SaxReader Reader = new SaxReader (); Документ doc = reader.read (f); Элемент root = doc.getRootelement (); Элемент foo; для (итератор i = root.elementiterator ("value"); i.hasnext () {foo = (element) i.next (); System.out.print ("номер номерного знака:" + foo.elementext ("no")); System.out.println ("Адрес владельца:" + foo.elementtext ("addrer"); e.printstacktrace ();})