Question

J'essaie actuellement de lire un fichier XML, d'apporter quelques modifications mineures (modifier la valeur de certains attributs) et de le réécrire.

J'ai l'intention d'utiliser un analyseur StAX (javax.xml.stream.XMLStreamReader) à lire dans chaque événement, voir si c'est celui que je voulais changer, puis le transmettre directement au rédacteur StAX (javax.xml.stream.XMLStreamReader) si aucune modification n'était requise.

Malheureusement, cela ne semble pas si simple - L'écrivain n'a aucun moyen de prendre un type d'événement et un objet analyseur, seulement des méthodes comme writeAttribute et writeStartElement.Évidemment, je pourrais écrire une grosse instruction switch avec une casse pour chaque type d'élément possible qui peut apparaître dans un document XML, et simplement la réécrire, mais cela semble poser beaucoup de problèmes pour quelque chose qui semble devoir être simple. .

Y a-t-il quelque chose qui me manque et qui facilite l'écriture d'un document XML très similaire à celui que vous lisez avec StAX ?

Était-ce utile?

La solution

StAX fonctionne plutôt bien et est très rapide.Je l'ai utilisé dans un projet pour analyser des fichiers XML allant jusqu'à 20 Mo.Je n'ai pas d'analyse approfondie, mais c'était nettement plus rapide que SAX.

Quant à ta question :La différence entre le streaming et la gestion des événements, AFAIK est le contrôle.Avec l'API de streaming, vous pouvez parcourir votre document étape par étape et obtenir le contenu souhaité.Alors que l'API basée sur les événements, vous ne pouvez gérer que ce qui vous intéresse.

Autres conseils

Après quelques recherches, la réponse semble être d'utiliser les versions lecteur/écrivain d'événements plutôt que les versions Stream.

(c'est à dire.javax.xml.stream.XMLEventReader et javax.xml.stream.XMLEventWriter)

Voir également http://www.devx.com/tips/Tip/37795, c'est ce qui m'a finalement fait bouger.

Je sais que c'est une question assez ancienne, mais si quelqu'un d'autre cherche quelque chose comme ça, il existe une autre alternative :L'API de l'extension Woodstox Stax2 a la méthode :

XMLStreamWriter2.copyEventFromReader(XMLStreamReader2 r, boolean preserveEventData) 

qui copie l'événement actuellement pointé à partir du lecteur de flux à l'aide de Stream Writer.Ce n’est pas seulement simple mais très efficace.Je l'ai utilisé pour des modifications similaires avec succès.

(comment obtenir XMLStreamWriter2 etc ?Toutes les instances fournies par Woodstox implémentent ces versions étendues - et il existe également des wrappers au cas où quelqu'un souhaite utiliser des variantes "de base" de Stax.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top