2010-02-15 4 views
3

Мне никогда не нравился XML, и я всегда старался его избежать. И настал день.Еще один вопрос в библиотеке Java XML

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

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

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

ответ

0

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

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

2

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

Имеют смысл?

0

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

3

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

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

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

0

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

Если вы хотите сопоставить XML-схему с Java-компонентами и автоматически проанализировать свой XML-файл в экземплярах этих компонентов, вы можете использовать , 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

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

Смежные вопросы