我没有看到javax.xml.stream.XMLEventWriter
或javax.xml.stream.XMLOutputFactory
中的选项以某种方式设置以便写入空元素(而不是显式的开始和结束元素对)。
我看到Woodstox有一个属性可以做到这一点,但它没有标准化。
我错过了任何明显的方法吗?
答案 0 :(得分:5)
writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");
答案 1 :(得分:4)
没有。 <x/>
和<x></x>
之间没有语义差异,标准API不提供请求其中一种的方法。
答案 2 :(得分:4)
设置属性,以便像<x/>
一样生成空标签,并与WoodStox API一起使用:
WstxOutputFactory factory = new WstxOutputFactory();
factory.setProperty(WstxOutputFactory.P_AUTOMATIC_EMPTY_ELEMENTS, true);
我想在XML标签中缩进。 setIndentation方法既不使用javax.xml.stream.XMLOutputFactory也不使用org.codehaus.stax2.XMLOutputFactory2
答案 3 :(得分:3)
在一些答案和评论中存在一些混淆。
StAX有两个API:
XMLStreamReader
和XMLStreamWriter
的“Cursor API”;和XMLEventReader
和XMLEventWriter
; 使用<example/>
使用 Cursor API 输出带有单个标记的空元素XMLStreamWriter
, :
xmlStreamWriter.writeEmptyElement("example");
使用<example/>
,使用XMLEventWriter
Iterator API 输出一个带有单个标记的空元素{/ 1}},不是,就我而言知道。在这种情况下,你很难生成一个带有两个标签<example></example>
的空元素:
xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));
答案 4 :(得分:2)
你可能已经知道了,但XMLStreamWriter确实有指定它应该是“真正的”空元素的方法。 XMLEventWriter缺少较低级别接口的一些部分。