10
votes

XMLEventWriter: Comment puis-je le dire d'écrire des éléments vides?

Je ne vois pas une option dans javax.xml.stream.xmlevencewriter ou javax.xml.stream.xmloutputSfactory pour définir soit utile de manière à ce que des éléments vides sont écrits (au lieu de paires d'éléments de début et de fin explicites).

Je vois que Woodstox a une propriété pour le faire, mais il n'est pas standardisé.

Est-ce que je manque de manière évidente de faire cela?


2 commentaires

est un élément vide.


Bien sûr que vous avez tout à fait raison. J'aurais dû être plus précis, car je n'étais évidemment pas clair ici. Ce que je veux dire, c'est un élément qui se termine par "/>".


5 Réponses :


3
votes

Non. Il n'y a pas de différence sémantique entre et et les API standard ne fournissent pas de moyen de demander l'un ou l'autre.


3 commentaires

Un détail de mise en œuvre de l'auteur de Stax inclus avec le JDK par défaut: appeler writeartelement ("localName"); rédécissement () entraîne une étiquette d'auto-fermeture, tout en appelant WriteStartelement ("localName" ); WriteCharacters (NULL); ÉLIME DE DÉMENT () Résultats dans une étiquette d'ouverture immédiatement suivie d'une étiquette de fermeture.


Comme vous le note, c'est un détail de mise en œuvre. D'autres sérialiseurs et versions ultérieures de Stax peuvent ne pas faire cela.


Je viens de disposer d'un problème où Jaxb Soumps sur mais convient parfaitement à . Donc, il semble y avoir une différence sémantique? Ou est-ce un bug dans jaxb?



2
votes

Vous le savez probablement déjà, mais XMLStreaMwriter dispose de la méthode de spécification de son "réel" élément vide. Xmleventwriter manque quelques pièces que l'interface de niveau inférieure a.


0 commentaires

4
votes

Configuration de la propriété afin que les balises vides sont générées comme code> fonctionne avec Woodstox API:

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


0 commentaires

7
votes
writer.writeEmptyElement("some_element");
writer.writeAttribute("some_attribute", "some_value");

0 commentaires

3
votes

Dans plusieurs réponses et commentaires, il y a une certaine confusion.

Stax a deux API:

  • l'API "CURSOR" à l'aide de xmlstreamreader et xmlstreamwriter ; et
  • L'API d'itérateur à l'aide de XMLEVENTReader et xmleventwriter ;

    sortie d'un élément vide avec une seule balise, , est possible avec l'API curseur en utilisant < Code> xmlstreamwriter : xxx

    sortie d'un élément vide avec une seule balise, , n'est pas < / Strong> possible avec l'API Itérateur en utilisant xmleventwriter , autant que je sache. Dans ce cas, vous êtes coincé avec la production d'un élément vide avec deux balises : xxx


0 commentaires