XMLEventWriter:我怎么能告诉它写空元素?

时间:2010-06-29 15:51:12

标签: java xml stax woodstox

我没有看到javax.xml.stream.XMLEventWriterjavax.xml.stream.XMLOutputFactory中的选项以某种方式设置以便写入空元素(而不是显式的开始和结束元素对)。

我看到Woodstox有一个属性可以做到这一点,但它没有标准化。

我错过了任何明显的方法吗?

5 个答案:

答案 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:

  • 使用XMLStreamReaderXMLStreamWriter的“Cursor API”;和
  • 使用XMLEventReaderXMLEventWriter;
  • 的“Iterator API”

使用<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缺少较低级别接口的一些部分。