Ответ 1
Нет. Между <x/>
и <x></x>
нет семантической разницы, а стандартные API не предоставляют способ запроса того или другого.
Я не вижу опции в javax.xml.stream.XMLEventWriter
или javax.xml.stream.XMLOutputFactory
, чтобы установить либо вверх таким образом, чтобы были записаны пустые элементы (а не явные пары начального и конечного элементов).
Я вижу, что у Woodstox есть свойство сделать это, но оно не стандартизировано.
У меня отсутствует какой-либо очевидный способ сделать это?
Нет. Между <x/>
и <x></x>
нет семантической разницы, а стандартные API не предоставляют способ запроса того или другого.
writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");
Вероятно, вы уже знаете это, но у XMLStreamWriter есть метод для указания, что он должен быть "реальным" пустым элементом. XMLEventWriter не хватает нескольких частей, которые имеют интерфейс нижнего уровня.
Устанавливает свойство так, что пустые теги генерируются как <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
В нескольких ответах и комментариях есть некоторая путаница.
StAX имеет два API:
XMLStreamReader
и XMLStreamWriter
; иXMLEventReader
и XMLEventWriter
;Вывод пустого элемента с одним тегом, <example/>
, возможен с помощью API-интерфейса Cursor с помощью XMLStreamWriter
:
xmlStreamWriter.writeEmptyElement("example");
Вывод пустого элемента с единственным тегом <example/>
, не может быть возможен с API-интерфейсом Iterator с использованием XMLEventWriter
, насколько я знаю. В этом случае вы застреваете с созданием пустого элемента с двумя тегами <example></example>
:
xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));