2010-06-29 9 views
10

Non vedo un'opzione entro javax.xml.stream.XMLEventWriter o javax.xml.stream.XMLOutputFactory per impostare in un modo tale che vengano scritti elementi vuoti (anziché coppie di elementi iniziali e finali espliciti).XMLEventWriter: come posso dire di scrivere elementi vuoti?

Vedo che Woodstox ha una proprietà per farlo, ma non è standardizzato.

Mi manca un modo ovvio per farlo?

+0

'' * è * un elemento vuoto. – skaffman

+0

Certo che hai perfettamente ragione. Avrei dovuto essere più specifico, dato che ovviamente non era chiaro qui. Quello che voglio dire è un elemento che termina con "/>". –

risposta

4

No. Non vi è alcuna differenza semantica tra <x/> e <x></x> e le API standard non forniscono un modo per richiedere l'una o l'altra.

+0

Un dettaglio di implementazione del writer StAX incluso in JDK per impostazione predefinita: chiamando 'writeStartElement (" localname "); writeEndElement()' genera un tag a chiusura automatica, mentre chiama 'writeStartElement (" localname "); writeCharacters (null) ; writeEndElement() 'produce un tag di apertura immediatamente seguito da un tag di chiusura. – Barend

+0

Come si nota, questo è un dettaglio di implementazione. Altri serializzatori e versioni successive di StAX potrebbero o meno farlo. –

+0

Ho appena un problema dove JAXB si strozza su '' ma sta bene con ''.Quindi sembra esserci una differenza semantica? O è un bug in JAXB? – Puce

2

Probabilmente lo sapete già, ma XMLStreamWriter ha un metodo per specificare che dovrebbe essere "reale" elemento vuoto. In XMLEventWriter mancano alcuni pezzi che l'interfaccia di livello inferiore ha.

2

proprietà impostazione in modo che i tag vuoti sono generati come <x/> opere con le API WoodStox:

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

ho voluto rientro in tag XML. il metodo setIndentation sta lavorando con né javax.xml.stream.XMLOutputFactory né org.codehaus.stax2.XMLOutputFactory2

4
writer.writeEmptyElement("some_element"); 
writer.writeAttribute("some_attribute", "some_value"); 
1

In molte delle risposte e commenta c'è una certa confusione.

StAX ha due API:

  • "cursore API" utilizzando XMLStreamReader e XMLStreamWriter; e
  • "API Iterator" utilizzando XMLEventReader e XMLEventWriter;

Emissione di un elemento vuoto con un singolo tag, <example/>, è possibile con l'API Cursore usando XMLStreamWriter:

xmlStreamWriter.writeEmptyElement("example"); 

Emissione di un elemento vuoto con un singolo tag, <example/>, è non possibile con l'API Iterator utilizzando XMLEventWriter, per quanto ne so. In questo caso sei bloccato con la produzione di un elemento vuoto con due tag <example></example>:

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