Java Supprimer vide balises XML
Je suis à la recherche d'un simple fragment de code Java pour supprimer les balises vides à partir d'une (de toute) la structure XML
<xml>
<field1>bla</field1>
<field2></field2>
<field3/>
<structure1>
<field4>bla</field4>
<field5></field5>
</structure1>
</xml>
doit se transformer en;
<xml>
<field1>bla</field1>
<structure1>
<field4>bla</field4>
</structure1>
</xml>
- Êtes-vous actuellement de l'analyse du XML dans des structures de données particulières (JDOM, etc)? Ou êtes-vous commencer à partir de zéro?
- Faute de frappe dans l'exemple XML: structure1 n'est pas correctement fermé
Vous devez vous connecter pour publier un commentaire.
Je me demandais si il serait facile de le faire avec le XOM bibliothèque et donné un essai.
Il s'est avéré pour être assez facile:
Ce ne sera probablement pas gérer tous les cas de coin correctement, comme un tout document vide. Et que faire au sujet des éléments qui sont vides, mais avoir des attributs?
Si vous souhaitez enregistrer les balises XML avec des attributs, nous pouvons ajouter dans la méthode 'handleNode' à cocher suivantes:
Aussi, si le document xml possède deux ou plusieurs balises vides, l'un après l'autre; cette méthode récursive permet de ne pas supprimer toutes les balises vides!
(Cette réponse est une partie de mon évaluation de XOM comme un potentiel remplacement de dom4j.)
Cette feuille de style XSLT devriez faire ce que vous êtes à la recherche pour:
Il devrait aussi préserver les éléments qui sont vides, mais ont des attributs qui ne le sont pas. Si vous ne voulez pas ce comportement, puis changement:
<xsl:if test=". != '' or ./@* != ''">
À:
<xsl:if test=". != ''">
Si vous souhaitez savoir comment l'utiliser XSLT en Java, il devrait y avoir beaucoup de tutoriels sur les Interwebs. Bonne chance!
Comme une note de côté: Les différents états d'une balise en fait ont un sens:
null
ounil
Donc, par la suppression des vide Ouvert-Fermé les balises et Unique Balises, vous êtes à la fusion avec le groupe de balises manquantes et donc de perdre de l'information.
J'ai testé Jonik et Marco exemples de codes. Mais ceux qui ne sont pas exactement ce que je veux. J'ai donc modifié leur source et de code ci-dessous fonctionne bien pour moi. J'ai déjà régler ce code dans mon projet. merci de le tester, si vous le souhaitez.
Si le xml est l'aliment sous forme de Chaîne; regex peut être utilisé pour filtrer les éléments vides:
Cela permettra de trouver des éléments vides.
de données dans ce cas, une variable contenant votre chaîne xml.
Ne pas dire ce qui serait la meilleure des solutions, mais c'est possible...
J'ai besoin d'ajouter de strip-l'espace et le tiret éléments de Chris R de réponse, sinon renfermant des blocs, nouvellement vide, ne sont pas supprimés:
Avec XSLT vous pourriez transformer votre XML à ignorer les balises vides et ré-écrire le document.
Pour supprimer toutes les balises vides, même si elles sont l'un après l'autre, une solution possible est:
Console:
Démo en ligne ici