Я ищу библиотеку java для разбора XML (сложные файлы конфигурации и данных), я немного погуглил, но не смог найти ничего, кроме dom4j (похоже, они работают на V2) .. Я посмотрел на конфигурацию общих, но не сделал Не нравится, Другие проекты Apache на XML кажутся в спящем режиме. Я не оценивал dom4j самостоятельно, но просто хотел знать - есть ли у java другие (хорошие) библиотеки с открытым исходным кодом для разбора xml? и как твой опыт работы с dom4j?
После ответа @ Voo позвольте мне задать еще один вопрос: использовать ли встроенные классы java или какую-либо стороннюю библиотеку, например dom4j .. Каковы преимущества?
Ответы:
На самом деле Java поддерживает 4 метода для анализа XML из коробки:
DOM Parser / Builder: вся структура XML загружается в память, и вы можете использовать хорошо известные методы DOM для работы с ней. DOM также позволяет записывать в документ преобразования Xslt. Пример:
SAX Parser: исключительно для чтения XML-документа. Парсер Sax проходит через документ и вызывает методы обратного вызова пользователя. Существуют методы для начала / конца документа, элемента и так далее. Они определены в org.xml.sax.ContentHandler, и есть пустой вспомогательный класс DefaultHandler.
StAx Reader / Writer: работает с интерфейсом, ориентированным на поток данных. Программа запрашивает следующий элемент, когда он готов, как курсор / итератор. Вы также можете создавать документы с ним. Читать документ:
Написать документ:
JAXB: новейшая реализация для чтения XML-документов: является частью Java 6 в v2. Это позволяет нам сериализовать объекты Java из документа. Вы читаете документ с помощью класса, который реализует интерфейс к javax.xml.bind.Unmarshaller (вы получаете класс для этого из JAXBContext.newInstance). Контекст должен быть инициализирован с использованием используемых классов, но вам просто нужно указать корневые классы и не беспокоиться о статических ссылочных классах. Вы используете аннотации, чтобы указать, какие классы должны быть элементами (@XmlRootElement), а какие поля являются элементами (@XmlElement) или атрибутами (@XmlAttribute, какой сюрприз!)
Написать документ:
Примеры бесстыдно скопированы с некоторых старых лекционных слайдов ;-)
Изменить: о "какой API я должен использовать?" Ну, это зависит - не все API имеют такие же возможности, как вы видите, но если у вас есть контроль над классами, которые вы используете для отображения XML-документа, JAXB - мое личное любимое, действительно элегантное и простое решение (хотя я не использовал его для действительно большие документы, это может быть немного сложным). SAX также довольно прост в использовании и просто держитесь подальше от DOM, если у вас нет веской причины использовать его - старый, неуклюжий API, на мой взгляд. Я не думаю, что есть какие-либо современные сторонние библиотеки, в которых есть что-то особенно полезное, чего не хватает в STL, а стандартные библиотеки имеют обычные преимущества: они чрезвычайно хорошо протестированы, документированы и стабильны.
источник
Java поддерживает два метода синтаксического анализа XML из коробки.
SAXParser
Вы можете использовать этот синтаксический анализатор, если вы хотите анализировать большие XML-файлы и / или не хотите использовать много памяти.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html
Пример: http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
DOMParser
Вы можете использовать этот синтаксический анализатор, если вам нужно выполнить запросы XPath или вам нужна полная DOM.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilderFactory.html
Пример: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
источник
Если вам нужен DOM-подобный API, то есть тот, в котором анализатор XML превращает документ в дерево узлов Element и Attribute, то есть по крайней мере четыре варианта: сам DOM, JDOM, DOM4J и XOM. Единственная возможная причина использования DOM заключается в том, что он воспринимается как стандарт и поставляется в JDK: во всех остальных отношениях все превосходят другие. Мое собственное предпочтение в отношении сочетания простоты, мощности и производительности - XOM.
И, конечно же, существуют другие стили обработки: низкоуровневые интерфейсы синтаксического анализатора (SAX и StAX), интерфейсы привязки объекта данных (JAXB) и высокоуровневые декларативные языки (XSLT, XQuery, XPath). Что лучше для вас, зависит от требований вашего проекта и вашего личного вкуса.
источник
Идея Никиты превосходна: не путайте зрелого с плохим. XML не сильно изменился.
JDOM была бы другой альтернативой DOM4J.
источник
Вам не нужна внешняя библиотека для разбора XML в Java. Java поставляется со встроенными реализациями для SAX и DOM на века.
источник
Для тех, кто заинтересован в использовании JDOM, но боится, что некоторое время не обновлялся (особенно без использования обобщений Java), есть разветвление под названием CoffeeDOM, которое точно учитывает эти аспекты и модернизирует JDOM API, подробнее здесь:
http://cdmckay.org/blog/2011/05/20/introducing-coffeedom-a-jdom-fork-for-java-5/
и загрузите его со страницы проекта по адресу:
https://github.com/cdmckay/coffeedom
источник
VTD-XML - это мощная библиотека для разбора XML ... она лучше, чем другие практически во всех отношениях ... вот статья 2013 года, в которой анализируются все платформы обработки XML, доступные на платформе Java ...
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
источник