Каковы различные подходы для преобразования XML с помощью Java? - PullRequest
3 голосов
/ 27 февраля 2012

Я изучаю, как преобразовать XML из одного формата в другой в проекте Java.

Какие есть альтернативы и каковы их плюсы и минусы?

Найденные мной альтернативы:

  1. XSLT / XQuery
  2. XML-привязка обоих форматов к Java и отображение в Java
  3. Groovy

Ответы [ 4 ]

5 голосов
/ 27 февраля 2012

Я голосую за XSLT. Преимущество этого правила в том, что правила преобразования отделены от вашего Java-кода. В дальнейшем вы можете легко реагировать на изменения схемы, не касаясь кода.

И вы можете тестировать / отлаживать преобразование где угодно - запускать приложение не нужно.

3 голосов
/ 27 февраля 2012

Если вы преобразуете XML в XML, вы будете выполнять дополнительную работу только для себя, если будете использовать не-XML-представление (например, объекты Java). Использование декларативного языка высокого уровня - это путь, который означает XSLT или XQuery.

При выборе между XSLT и XQuery мой обычный совет - оптимизировать XSLT для преобразования, а XQuery - для запроса. Под «преобразованием» я подразумеваю задачи, в которых большая часть входных данных появляется в выходных данных, просто в другой форме. Под «запросом» я подразумеваю извлечение фрагментов информации из множества данных.

Конечно, у всех этих технологий есть кривая обучения, и если у вас есть небольшая разовая работа, то это может быть действительным фактором при выборе ваших инструментов. Но лучший совет для проекта, использующего XML и Java, - это делать как можно меньше Java. Думать об этом как о «проекте Java», вероятно, плохая стартовая позиция.

0 голосов
/ 31 июля 2013

Кажется, что стандартом дефакто является XSLT.Лично я ненавижу XSLT за его многословие и считаю, что его трудно читать и поддерживать.

Я очень предпочитаю freemarker, и я обнаружил, что разработчикам java гораздо проще подобрать и поддерживать.Freemarker имеет встроенную поддержку XML , включая xpath .Вы можете создавать пользовательские теги freemarker для общих задач, чтобы еще больше улучшить повторное использование и удобочитаемость, а также уменьшить детализацию.

Одна из вещей, которые мне нравятся в freemarker, это то, что вы можете внедрять java-помощники и сервисы в контекст freemarker и вызывать их.методы в ваших шаблонах.Эти методы могут поразить вашу базу данных, например.Чтобы сделать это в XSLT, мы использовали для преобразования таблиц БД в XML, а затем перебирали узлы XML в шаблоне, который был неэффективным или кратким.

Таким образом, шаблон свободного маркера, вероятно, будет составлять 1/3 отстроки кода как шаблон XSLT делают то же самоеПоскольку вы можете использовать java-помощники, вы можете оптимизировать поиск с помощью хэш-карт и наборов и т. Д. В результате вы получите более производительные шаблоны, которые более удобочитаемы и просты в обслуживании.

Один из недостатков поддержки XML в Freemarker заключается в том, что оноснован на DOM.Поэтому, если вы обрабатываете огромные XML-документы, вы получите OutOfMemoryErrors.XSLT, с другой стороны, основан на SAX.

0 голосов
/ 27 февраля 2012

Я бы сказал также:

  1. SAX может быть проще реализовать, если ваше преобразование достаточно просто
  2. XSLT, если ваше преобразование или структура данных сложны, используйте схемы и вам потребуется надежное основание для удобства обслуживания

Другим вариантом является JDOM , но только если у вас есть простая объектно-подобная структура данных и вы не хотите использовать схемы.

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