我没有看到其中的选项javax.xml.stream.XMLEventWriter
或javax.xml.stream.XMLOutputFactory
以某种方式设置任何一个以便写入空元素(而不是显式的开始和结束元素对)。
我看到 Woodstox 有一个属性可以做到这一点,但它不是标准化的。
我是否缺少任何明显的方法来做到这一点?
writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");
<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
不,and之间没有语义差异<x/>
,<x></x>
标准 API 不提供请求其中一个的方法。
在一些答案和评论中存在一些混淆。
StAX 有两个 API:
XMLStreamReader
使用and的“游标 API” XMLStreamWriter
;和XMLEventReader
使用and的“迭代器 API” XMLEventWriter
;使用Cursor API可以使用以下命令输出带有单个标记的空<example/>
元素:XMLStreamWriter
xmlStreamWriter.writeEmptyElement("example");
据我所知,使用Iterator API输出带有单个标记的空元素<example/>
是不可能的。在这种情况下,您将无法生成带有两个标签的空元素:XMLEventWriter
<example></example>
xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));
您可能已经知道这一点,但是 XMLStreamWriter 确实有方法可以指定它应该是“真正的”空元素。XMLEventWriter 缺少一些较低级别接口所具有的部分。