8
votes

Meilleur parseur XML Java pour manipuler / modifier un document XML existant

Tâche: J'ai un document XML existant (UTF-8) qui utilise des espaces de noms XML et un schéma XML. J'ai besoin d'analyser à un élément particulier, à l'annexe de contenu (qui doit également utiliser des préfixes de l'espace de noms XML) à cet élément, puis écrivez à nouveau le document.

Quelle est la meilleure bibliothèque de parser XML que je devrais utiliser pour cette tâche?

J'ai vu un fil précédent ( Meilleur analyseur XML pour Java ) mais N'était pas sûr si DOM4J ou JDOM est une bonne qualité pour les espaces de noms / xmlschema et un bon support pour les caractères UTF-8.

Certains analyseurs qui ressemblent à une tâche pour
Jdom
DOM4J
Xom
Woodstock

Une idée qui est la meilleure? :-) J'utilise JDK 6 et préférerais ne pas utiliser les installations SAX / DOM intégrées pour faire ce travail car cela me demande d'écrire trop de code.

aiderait à avoir quelques exemples de faire une telle tâche.


1 commentaires

Comment le faire avec l'installation DOM intégrée va-t-elle être trop au code? Ah, droite - Java ... ;-) Mais sérieusement: est-ce que 15-20 lignes trop de code à votre avis? Qu'est-ce qui serait acceptable alors?


4 Réponses :


6
votes

Utilisez XSLT. Sérieusement. C'est un travail parfait pour cela. Utilisez simplement un modèle de copie pour tout copier, à l'exception de l'endroit où vous devez ajouter plus de XML. Vous pouvez même ajouter le XML en écrivant réellement XML au lieu de la manipulation DOM.

Ceci est le modèle de copie: P>

<xsl:template match="node() | @*">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>


0 commentaires

1
votes

On dirait que vous pouvez écrire une feuille de style XSLT pour faire ce que vous voulez.


0 commentaires

6
votes

Utilisation de JDOM, en prenant une intrigue et en faisant un document: xxx pré>

à ce point, vous avez le XML dans un objet Java. Terminé. Facile. P>

Vous pouvez utiliser l'objet de document et l'API Java pour passer à travers elle, soit également utiliser XPath, ce que je trouve plus facile (une fois que je l'ai appris). P>

Construire Un objet XPath, qui prend un peu: p> xxx pré>

il suffit de l'utiliser, qui (heureusement) ne prend pas beaucoup de temps du tout: P>

return Integer.parseInt(xpath.evaluate("/a:feed/os:totalResults/text()", document));


1 commentaires

+1 - JDOM est l'API la plus facile à apprendre pour cela. XSLT sera un meilleur choix si vous avez des tâches comme cela souvent, cependant.



3
votes

Étant donné que l'écriture trop de code est le problème principal pour vous, vous voudrez peut-être envisager JOOX:

http://code.google.com/p/joox/

J'ai créé Joox pour être un port de JQuery à Java. La technologie sous-jacente est la standard DOM de Java. Certains échantillons de code: xxx

Remarque: les espaces de noms ne sont pas encore explicitement pris en charge, mais vous pouvez contourner ce


7 commentaires

Joox est de bonnes idées. Mais j'ai perdu du temps, car cette technologie ne prend pas en charge la manipulation avec des attributs. Sans cela, cette technologie ne convient que pour la lecture.


@wojand: Qu'est-ce qui te fait penser? Joox permet la manipulation des attributs. Voir le troisième exemple dans ma réponse, qui définit id = "13"


Montrez-moi comment ajouter des attributs à la balise existante. Vous pouvez ajouter une balise, mais le problème est que vous devez ajouter des attributs à la balise existante. Je n'ai pas pu trouver une solution simple. Je n'ai trouvé aucun exemple sur la page Joox pour ce problème. Au-dessus de votre exemple Ajoutez une balise avec attribut, mais comment annuler un seul attribut à $ {} sans étiquette?


Je ne suis pas sûr de comprendre. Vous ne pouvez ajouter que des attributs aux éléments, pourquoi ajouteriez-vous un attribut à quelque chose de "vide"?


Tu ne me comprends pas. Votre exemple montre comment ajouter une balise contenant l'attribut aux documents, mais pas montrer comment ajouter un attribut à la balise. Méthode "Ajoutez" Tags Besoints. Je ne peux pas ajouter que des attributs à l'aide de la méthode "APPEND". Cela mène à cela que je dois ré-écriture de la balise lorsque je souhaite seulement ajouter un attribut. Peut-être que ce problème est résolu, mais cela n'est pas décrit dans votre documentation et lorsque j'ai perdu plus de temps que je prévoyai, j'ai déplacé mon code vers une autre bibliothèque.


@WOJAND: Peu importe que la balise à laquelle un attribut est ajouté était déjà contenue dans l'un ou l'autre document. attr (string, chaîne) ajoute simplement un attribut à l'élément précédemment correspondant ... Je suis désolé que la documentation soit un peu rare en ce moment ...


@gaurav: il vient d'envelopper org.w3c.dom et en tant que tel hérite de la filetage de DOM INSESSION.