Лучший XML обработка класса в [закрытом] Java

Вы захотите использовать макросы форматирования от inttypes.h.

Посмотрите этот вопрос: строка Кросс-платформенного формата для переменных типа size_t?

8
задан Epaga 28 August 2009 в 11:53
поделиться

12 ответов

It really depends on what you want to do with the XML document and how big the documents are.

Roughly, you can categorise XML APIs as:

  • DOM APIs - load the entire document into memory, which limits the size of document you can process, but can then create optimised structures for navigation and transformation
  • Streaming APIs - your application must interpret low level parse events (e.g. start of element, end of element, etc.) but you are not limited by memory. There are two kinds of streaming API - push and pull. Push parsers fire parse events at an object you define and that object must keep track of the current parse state, with a state machine or stack, for example). Pull parsers let your app pull parse events from the parser. This makes it easy to write a recursive descent parser to process the XML content, but then stack size becomes a limit on the size of document you can process.
  • XML Mappers - map XML content to Java objects. There are two main approaches for XML mapping: code-gen or reflection. Code-gen mappers generate Java classes from an XML schema, which means you don't have to duplicate the schema structure in Java code but does have the disadvantage that your Java code exactly mirrors the schema structure. Also most code generators create NOJO classes that are awkward to work with and have no behaviour of their own. Reflective mappers let you to write Java classes with rich behaviour and then define how they are mapped to/from XML. If you need to conform to a predefined schema, you'll have to make sure your classes and mapping configuration are correct w.r.t. that schema.

Some options available are:

  • DOM APIs: The DOM APIs in the standard library are standard (obviously!) and so interoperate with other libraries but they are awful. There are several more convenient DOM-like APIs, such as XOM (my favourite for the same reasons that Adam Batkin gives above) or JDOM. Have a look at a few and decide which API you prefer.
  • Streaming APIs: the standard library contains an implementation of the SAX push parser. The standard pull parser for Java is StAX.
  • Mapping APIs: JAXB is a JSR standard but I prefer XStream because I can more easily separate the mapping configuration from the mapped classes (no need for annotations or XML configuration) and it maps objects to/from other data formats.
19
ответ дан 5 December 2019 в 06:54
поделиться

Я считаю, что dom4j превосходит все, что я использовал (особенно JDOM, у которого, как я считаю, особенно плохой API). dom4j позволяет подключить Jaxen для поддержки XPath.

Примеры:

   SAXReader reader = new SAXReader(); // dom4j SAXReader  
   Document document = reader.read(xmlInputStream); // dom4j Document  

   // select all link nodes with href "http://example.com"  
   List<Element> linkNodes = document.selectNodes("//link[@href='http://example.com']");  

   // select an attribute value  
   String val = linkNodes.get(0).attributeValue("href");  

   // select element text and trim it  
   String value = document.elementTextTrim("childNode");  
3
ответ дан 5 December 2019 в 06:54
поделиться

Мне повезло с JAXB . Он включен в Java SE 6.

1
ответ дан 5 December 2019 в 06:54
поделиться

Я думаю, что это JDOM для простоты использования.

1
ответ дан 5 December 2019 в 06:54
поделиться

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

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

0
ответ дан 5 December 2019 в 06:54
поделиться

Я предпочитаю использовать классическую комбинацию DOM и SAX.

0
ответ дан 5 December 2019 в 06:54
поделиться

Если вы только читаете, то XPath - хороший выбор. В противном случае DOM (в пакете org.w3c.dom ) - ваш лучший выбор.

0
ответ дан 5 December 2019 в 06:54
поделиться

Вы должны выбрать между двумя разными подходами к обработке XML: существует DOM и SAX , оба с преимуществами и недостатками. Все зависит от ваших потребностей и размера XML-документа, который вы хотите обработать. Уже упомянутый JAXB создает API, описанный выше, и поставляется с Java 6.

Когда вы поняли вышеизложенное, вы можете конкретизировать свой вопрос и, возможно, попросить лучшую DOM или лучшую реализацию SAX . Кроме того, было бы хорошо, если бы вы могли использовать свои требования. Вы хотите писать или читать XML? Насколько велики будут файлы? И т. Д.

РЕДАКТИРОВАТЬ:

Как указал Нат , существует также StAX в качестве третьей альтернативной концепции.

0
ответ дан 5 December 2019 в 06:54
поделиться

Java хорошо поддерживает XML. Проблема в том, что существует очень много вариантов. Итак, не существует единого решения, которое являлось бы «правильным» способом обработки XML в Java. Вы должны выбрать инструменты в зависимости от решаемой проблемы.

Допустим, у вас есть сложные проверенные документы, которые вы хотите загрузить в дерево объектов, которое затем вы можете запрашивать и управлять деревом. Для этого вам понадобится парсер DOM, и есть из чего выбрать. Это преобразует весь документ в объекты, что может быть дорогостоящим с точки зрения ЦП.

Допустим, у вас есть документ, в котором вы хотите выделить определенные элементы, и производительность является проблемой. Попробуйте синтаксический анализатор SAX, синтаксический анализатор запроса или XPath.

Возможно, вам нужно маршалировать / демаршалировать объекты в сети. JAXB является кандидатом для этого, как и другие варианты.

Итак, есть ' Нет единственного правильного ответа на ваш вопрос. Как и в случае любой проблемы [программирования], вы должны рассмотреть проблему, оценить варианты и выбрать лучший инструмент для работы.

0
ответ дан 5 December 2019 в 06:54
поделиться

Когда мне нужно было работать с XML-документами, я всегда думал о dom4j / sax как о первом средстве, и это никогда меня не подводит. ;)

Вам следует заглянуть в SAXReader.

0
ответ дан 5 December 2019 в 06:54
поделиться

@Epaga, если вы не поместите слово «лучший» в контекст, вы проиграете с треском.

Например, попытка загрузить огромный XML в структуру, подобную DOM, была бы очень глупой. Выбирать инструмент нужно с умом.

0
ответ дан 5 December 2019 в 06:54
поделиться

XOM ( http://www.xom.nu ) - это простой и гибкий набор инструментов XML, который я нашел более простым и легким в использовании, чем многие другие парсеры. После перехода со стандартных инструментов на основе W3C моя продуктивность значительно выросла. На своих веб-страницах автор Эллиотт Расти Гарольд объясняет, почему дизайн XOM является подходящей моделью для XML DOM.

0
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: