Еще один вопрос библиотеки Java XML - PullRequest
3 голосов
/ 15 февраля 2010

Мне никогда не нравился XML, и я всегда старался его избегать. И вот, наконец, день настал.

Когда я пытался разобрать XML, это было действительно сложно. Я использовал анализатор DOM, когда я вызвал getChildNodes() из Node, он вернул NodeList. При использовании XPath мне пришлось использовать кастинг.

Существует ли какая-либо библиотека синтаксического анализа Java XML, аналогичная механизму WebElement WebDriver, где getChildNodes() возвращает List<Node> (или Collection, Iterable и т. Д.), Мне не нужно выполнять приведение. Другими словами, есть ли элегантная и простая библиотека синтаксического анализатора XML.

Библиотека может быть только для чтения, мне не нужны манипуляции.

Ответы [ 6 ]

3 голосов
/ 15 февраля 2010

Я бы исследовал JDOM как гораздо более удобный API.

например. Element.getChildren() возвращает список Element объектов (к сожалению, не обобщен, но документация по API ясна).

dom4j - другая альтернатива (опять же, не обобщенная).

2 голосов
/ 15 февраля 2010

Это действительно зависит от того, для чего вы используете XML. Например, в проекте, над которым я только что работал, мы написали бэкэнд-функциональность для приложения. Мы отправляли / получали сообщения через веб-сервисы и SOAP. При настройке я использовал аннотации Spring-WS и JAXB. Из-за этого он автоматически преобразовал SOAP XML в объекты Java, поступающие в / из серверной части. Это означало, что, хотя остальная часть команды концептуально знала, что происходит, они были изолированы от фактического запроса SOAP, если они не хотели просматривать их в целях отладки и тому подобного. Ни один из нашего кода не имел дело с XML напрямую, только с объектами, сгенерированными с помощью JAXB.

Имеет смысл?

0 голосов
/ 03 мая 2011

dom4j начали использовать дженерики и Collection с версией 2.0

Документация не очень хороша для 2.0, но старая документация хорошо работает.

0 голосов
/ 15 февраля 2010

API JDOM может оказаться более интуитивным и простым в использовании, чем встроенный DOM API JDK. К сожалению, API не использует обобщенные значения для возвращаемых коллекций / списков, поэтому вам все равно придется выполнить приведение к возвращаемым значениям.

0 голосов
/ 15 февраля 2010

Как уже упоминалось ранее, это действительно зависит от того, что вы намереваетесь делать.

Если вы хотите отобразить свою XML-схему с помощью Java-бинов и автоматически проанализировать ваш XML-файл по экземплярам этих бинов, вы можете использовать JAXB , XMLBeans .

Если вы просто хотите анализировать простые XML-файлы и работать с ними на лету, вы можете использовать JDOM , альтернативу DOM и SAX.

Это дает вам возможность получить List элемента:

Iterator itr = (currentElement.getChildren()).iterator();
   while(itr.hasNext()) {
     Element oneLevelDeep = (Element)itr.next();
     List twoLevelsDeep = oneLevelDeep.getChildren();
     // Do something with these children
   }
0 голосов
/ 15 февраля 2010

Я бы также использовал JAXB. Но если у вас есть схема, связанная с вашим XML (или вы можете создать ее), вы можете использовать компилятор jaxb xjc для создания классов Java, представляющих вашу структуру XML. Затем легко разобрать и перемещаться по XML. Это альтернатива вышеуказанному подходу, потому что в вашем коде нет аннотаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...