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 のどちらとも連携していません。
いくつかの回答とコメントには、混乱があります。
StAX には 2 つの API があります。
XMLStreamReaderとを使用する「カーソル API」XMLStreamWriter。とXMLEventReaderandを使用する「イテレータ API」XMLEventWriter。を使用してCursor APIを使用すると<example/>、単一のタグ を持つ空の要素を出力できます。XMLStreamWriter
xmlStreamWriter.writeEmptyElement("example");
私の知る限り、 を使用したIterator API<example/>では、単一のタグ で空の要素を出力することはできません。この場合、次の 2 つのタグを持つ空の要素を作成することになります。XMLEventWriter<example></example>
xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example"));
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example"));
いいえ。 と の間<x/>に意味上の違いはなく<x></x>、標準 API はどちらか一方を要求する方法を提供しません。
すでにご存知かもしれませんが、XMLStreamWriter には、「実際の」空の要素であることを指定するメソッドがあります。XMLEventWriter には、下位レベルのインターフェースにあるいくつかの要素がありません。