XMLEventWriter: как я могу сказать ему писать пустые элементы? - PullRequest
10 голосов
/ 29 июня 2010

Я не вижу опции в javax.xml.stream.XMLEventWriter или javax.xml.stream.XMLOutputFactory, чтобы настроить их так, чтобы записывались пустые элементы (вместо явных пар начального и конечного элементов).

Я вижу, что у Woodstox есть свойство делать это, но оно не стандартизировано.

Мне не хватает очевидного способа сделать это?

Ответы [ 5 ]

5 голосов
/ 20 марта 2013
writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");
4 голосов
/ 14 июля 2010

Установка свойства для генерации пустых тегов, например <x/>, работает с API-интерфейсами WoodStox:

WstxOutputFactory factory = new WstxOutputFactory();
factory.setProperty(WstxOutputFactory.P_AUTOMATIC_EMPTY_ELEMENTS, true);

Я хотел сделать отступ в тегах XML. метод setIndentation не работает ни с javax.xml.stream.XMLOutputFactory, ни с org.codehaus.stax2.XMLOutputFactory2

4 голосов
/ 29 июня 2010

Нет.Между <x/> и <x></x> нет семантической разницы, и стандартные API не обеспечивают способ запроса того или другого.

3 голосов
/ 21 апреля 2015

В некоторых ответах и ​​комментариях есть некоторая путаница.

StAX имеет два API:

  • «Курсор API» с использованием XMLStreamReader и XMLStreamWriter; и
  • «Итератор API» с использованием XMLEventReader и XMLEventWriter;

Вывод пустого элемента с одним тегом, <example/>, возможен с помощью Cursor API с использованием XMLStreamWriter:

xmlStreamWriter.writeEmptyElement("example");

Вывод пустого элемента с одним тегом, <example/>, не возможен с помощью Iterator API с использованием XMLEventWriter, насколько я знаю. В этом случае вы застряли в создании пустого элемента с двумя тегами <example></example>:

xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));
2 голосов
/ 10 июля 2010

Возможно, вы уже знаете это, но у XMLStreamWriter есть метод для указания, что это должен быть "настоящий" пустой элемент.XMLEventWriter не хватает нескольких частей, которые есть в интерфейсе более низкого уровня.

...