Tu sais, test="text()" renverra vrai même si l'élément ne contient que des blancs : les blancs c'est aussi du texte.
les seuls cas où un peut renvoyer faux c'est <a></a> ou <a/> ou <a machin="bidule"/>Pour virer les blancs, il faut utiliser normalize-space() :
<when test="* | text()[normalize-space(.) != '']"
Et pour virer les parents vides, t'as pas trop le choix : tu dois détecter qu'un élément ne contient rien avant de décider de le copier.
Le test doit donc porter sur l'intégralité du texte qui est contenu avec ses sous-balises (si ses balises contiennent du texte, elles sont pas vides et donc lui non plus. Si elles ne contiennent pas de texte, elles doivent être supprimées et le seront avec lui) :
<xsl:when test="normalize-space(.) != ''">
et bien sûr pas de <xsl:otherwise>, puisque s'il est vide, alors son contenu aussi.
Partager