Which is the best library for XML parsing in java [closed]
Какая лучшая библиотека для синтаксического анализа XML в java
Я ищу библиотеку java для синтаксического анализа XML (сложной конфигурации и файлов данных), я немного погуглил, но не смог найти ничего, кроме dom4j (похоже, они работают на версии V2).. Я посмотрел конфигурацию commons, но она мне не понравилась, другие проекты apache по XML, похоже, находятся в спящем режиме. Я не оценивал dom4j самостоятельно, но просто хотел узнать - есть ли в java другие (хорошие) библиотеки синтаксического анализа xml с открытым исходным кодом? и каков ваш опыт работы с dom4j?
После ответа @ Voo's позвольте мне задать еще один вопрос - должен ли я использовать встроенные классы Java или любую стороннюю библиотеку, такую как dom4j.. В чем преимущества?
Переведено автоматически
Ответ 1
На самом деле Java поддерживает 4 метода для готового синтаксического анализа XML:
DOM-анализатор / конструктор: вся структура XML загружается в память, и вы можете использовать хорошо известные методы DOM для работы с ней. DOM также позволяет выполнять запись в документ с помощью преобразований Xslt. Пример:
publicstaticvoidparse()throws ParserConfigurationException, IOException, SAXException { DocumentBuilderFactoryfactory= DocumentBuilderFactory.newInstance(); factory.setValidating(true); factory.setIgnoringElementContentWhitespace(true); DocumentBuilderbuilder= factory.newDocumentBuilder(); Filefile=newFile("test.xml"); Documentdoc= builder.parse(file); // Do something with the document here. }
Анализатор SAX: исключительно для чтения 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, а стандартные библиотеки обладают обычными преимуществами: они чрезвычайно хорошо протестированы, документированы и стабильны.
Ответ 2
Java поддерживает два метода для готового синтаксического анализа XML.
SAXParser
Вы можете использовать этот анализатор, если хотите анализировать большие XML-файлы и / или не хотите использовать много памяти.
Если вам нужен DOM-подобный API, то есть такой, в котором анализатор XML превращает документ в дерево элементов и узлов атрибутов, тогда есть как минимум четыре варианта на выбор: сам DOM, JDOM, DOM4J и XOM. Единственная возможная причина использования DOM заключается в том, что он воспринимается как стандарт и поставляется в JDK: во всех остальных отношениях все остальные превосходят. Я лично предпочитаю XOM из-за сочетания простоты, мощности и производительности.
И, конечно, существуют другие стили обработки: низкоуровневые интерфейсы синтаксического анализа (SAX и StAX), интерфейсы привязки данных к объектам (JAXB) и декларативные языки высокого уровня (XSLT, XQuery, XPath). Что лучше для вас, зависит от требований вашего проекта и вашего личного вкуса.
Ответ 4
Точка зрения Никиты превосходна: не путайте mature с bad. XML не сильно изменился.