Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XMLEventWriter:如何告诉它写入空元素?_Java_Xml_Stax_Woodstox - Fatal编程技术网

Java XMLEventWriter:如何告诉它写入空元素?

Java XMLEventWriter:如何告诉它写入空元素?,java,xml,stax,woodstox,Java,Xml,Stax,Woodstox,在javax.xml.stream.XMLEventWriter或javax.xml.stream.XMLOutputFactory中,我看不到一个选项可以设置为写入空元素(而不是显式的开始和结束元素对) 我看到Woodstox有这样做的属性,但它不是标准化的 我是否缺少任何明显的方法来实现这一点?否。和之间没有语义上的区别,标准API没有提供请求其中一个或另一个的方法。您可能已经知道这一点,但XMLStreamWriter确实有方法指定它应该是“真实”空元素。XMLEventWriter缺少较

javax.xml.stream.XMLEventWriter
javax.xml.stream.XMLOutputFactory
中,我看不到一个选项可以设置为写入空元素(而不是显式的开始和结束元素对)

我看到Woodstox有这样做的属性,但它不是标准化的


我是否缺少任何明显的方法来实现这一点?

否。
之间没有语义上的区别,标准API没有提供请求其中一个或另一个的方法。

您可能已经知道这一点,但XMLStreamWriter确实有方法指定它应该是“真实”空元素。XMLEventWriter缺少较低级别接口的一些部分。

设置属性以生成空标记,就像WoodStox API一样:

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

我想要XML标记中的缩进。setIndentation方法既不适用于javax.xml.stream.XMLOutputFactory,也不适用于org.codehaus.stax2.XMLOutputFactory2。在一些答案和注释中,存在一些混淆

writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");
StAX有两个API:

  • 使用
    XMLStreamReader
    XMLStreamWriter
    的“游标API”;及
  • 使用
    XMLEventReader
    XMLEventWriter
    的“迭代器API”
通过使用
XMLStreamWriter
,游标API可以输出带有单个标记
的空元素:

xmlStreamWriter.writeEmptyElement("example");
据我所知,使用
XMLEventWriter
的迭代器API不可能输出带有单个标记
的空元素。在这种情况下,您必须生成一个带有两个标记的空元素

xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));

是一个空元素。当然你是对的。我应该说得更具体些,因为我在这里显然不清楚。我的意思是,一个以“/>”结尾的元素。默认情况下,JDK中包含的StAX编写器的一个实现细节:调用
WriteStarteElement(“localname”);writeEndElement()
在调用
WriteStarteElement(“localname”)时会产生一个自动关闭标记;writeCharacters(空);writeEndElement()
会产生一个开始标记,紧接着是一个结束标记。正如您所注意到的,这是一个实现细节。其他序列化程序和StAX的更高版本可能会也可能不会这样做。我只是遇到了一个问题,JAXB阻塞了
,但可以使用
。那么这似乎有语义上的区别?还是JAXB中的一个bug?