Bonjour,
Suite à la discussion que j'avais ouverte pour identifier les nœuds vides d'un fichier XML : http://www.developpez.net/forums/d14...-noeuds-vides/
J'ai une nouvelle question :
Il me faudrait supprimer les nœuds vides d'un fichier XML, mais pas les nœuds vides ayant des attributs.
Exemple :
Voici le xml en entrée :
Et le résultat attendu serait donc que <tag3child3> disparaisse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="UTF-8"?> <root> <tag1> un peu de texte </tag1> <tag2> encore du texte </tag2> <tag3> <tag3child1>test</tag3child1> <tag3child2 attribut1="test"/> <tag3child3/> </tag3> </root>
J'utilise le script XSLT suivant, en rajoutant dans ma condition le fait qu'il recherche les nœuds vides qui n'ont pas d'attributs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <?xml version="1.0" encoding="UTF-8"?> <root> <tag1> un peu de texte </tag1> <tag2> encore du texte </tag2> <tag3> <tag3child1>test</tag3child1> <tag3child2 attribut1="test"/> </tag3> </root>
J'essaie avec ceci : and @*= '' mais apparemment ce n'est pas la bonne solution / syntaxe.
Ce n'est pas ce que j'espérais puisque j'obtiens le résultat suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <!-- --> <!-- Remove elements if empty --> <!-- --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="tag3child1|tag3child2|tag3child3"> <xsl:if test="normalize-space(string(.)) != '' and @* != ''"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:if> </xsl:template> </xsl:stylesheet>
Le tag 3 est complètement vide, j'avoue que mes recherches se sont révélées plutôt infructueuses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?xml version="1.0" encoding="UTF-8"?> <root> <tag1> un peu de texte </tag1> <tag2> encore du texte </tag2> <tag3> <!-- tag3 est complètement vide --> </tag3> </root>
Un peu d'aide, ou une piste serait la bienvenue
D'avance merci
Partager