2010-06-29 16 views
10

Nie widzę opcji w obrębie javax.xml.stream.XMLEventWriter lub javax.xml.stream.XMLOutputFactory, aby ustawić w taki sposób, aby były puste elementy (zamiast wyraźnych par elementów początkowych i końcowych).XMLEventWriter: jak mogę powiedzieć, aby pisać puste elementy?

Widzę, że Woodstox ma właściwość do tego, ale nie jest ustandaryzowana.

Czy brakuje mi jakiegoś oczywistego sposobu, aby to zrobić?

+0

'' * to * pustym elementem. – skaffman

+0

Oczywiście masz rację. Powinienem być bardziej konkretny, ponieważ oczywiście nie było tu jasno. Mam na myśli element, który kończy się na "/>". –

Odpowiedz

4

Nie. Nie ma różnicy semantycznej między <x/> i <x></x>, a standardowe interfejsy API nie umożliwiają żądania jednego lub drugiego.

+0

Szczegóły implementacji programu piszącego StAX domyślnie dołączonego do JDK: wywołanie 'writeStartElement (" localname "), writeEndElement()' powoduje samozamykanie się tagu podczas wywoływania 'writeStartElement (" localname "); writeCharacters (null) ; writeEndElement() 'tworzy tag otwierający, po którym następuje tag zamykający. – Barend

+0

Jak sam to zauważyłeś, jest to szczegół implementacji. Inne serializery i nowsze wersje StAX mogą, ale nie muszą tego robić. –

+0

Po prostu mam problem, w którym JAXB dławi na '' ale jest w porządku z ''.Czy zatem wydaje się, że istnieje różnica semantyczna? Czy jest to błąd w JAXB? – Puce

2

Prawdopodobnie już to wiesz, ale XMLStreamWriter ma metodę do określenia, że ​​powinien to być "prawdziwy" pusty element. W XMLEventWriter brakuje kilku elementów, które ma interfejs niższego poziomu.

2

ustawienie właściwości tak, że puste znaczniki są generowane jak <x/> prac z WoodStox API:

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

chciałem wcięcia w znacznikach XML. metoda setIndentation współpracuje z żadnym javax.xml.stream.XMLOutputFactory ani org.codehaus.stax2.XMLOutputFactory2

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

W kilku odpowiedzi i komentarze istnieją pewne zamieszanie.

StAX ma dwa API:

  • przycisków "API kursora" za pomocą XMLStreamReader i XMLStreamWriter; i
  • "Iterator API" z użyciem XMLEventReader i XMLEventWriter;

Wyprowadzanie pustego elementu z pojedynczego znacznika <example/>, jest możliwe API kursora stosując XMLStreamWriter:

xmlStreamWriter.writeEmptyElement("example"); 

wyprowadzania pustego elementu z pojedynczego znacznika <example/>, jest nie jest możliwe z Iterator API z wykorzystaniem , o ile wiem. W tym przypadku utkniesz z produkcji pustego elementu z dwóch znaczników <example></example>:

xmlEventWriter.add(xmlEventFactory.createStartElement("", null, "example")); 
xmlEventWriter.add(xmlEventFactory.createEndElement("", null, "example")); 
Powiązane problemy