Problème de contexte dans une boucle « for-each »
Bonjour,
J’aimerais récupérer uniquement les balises contenant du texte d’un XML de ce type :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<html>
<keyword/>
<p>Ceci est le 1er bloc</p>
<keyword>Ceci est le 1er keyword</keyword>
<p>Ceci est le 2ème bloc</p>
<keyword/>
<p>Ceci est le 3ème bloc</p>
<p/>
<keyword>Ceci est le 3ème keyword</keyword>
<p>Ceci est le 4ème bloc</p>
<keyword/>
</html> |
J’ai testé avec différentes méthodes et ce qui se rapproche le plus du résultat que je souhaite obtenir est :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<html>
<xsl:if test="/html/p != ''">
<xsl:for-each select="/html/p != ''">
<p>
<xsl:apply-templates/>
</p>
<xsl:if test="./following::keyword[1]">
< keyword >
<xsl:value-of select="./following::keyword[1]" />
</ keyword >
</xsl:if>
</xsl:for-each>
</xsl:if>
</html> |
Résultat
Code:
1 2 3 4 5 6 7 8 9 10
|
<html>
<p>Ceci est le 1er bloc</p>
<keyword>Ceci est le 1er keyword</keyword>
<p>Ceci est le 2ème bloc</p>
<keyword>Ceci est le 3ème keyword</keyword>
<p>Ceci est le 3ème bloc</p>
<keyword>Ceci est le 3ème keyword</keyword>
<p>Ceci est le 4ème bloc</p>
</html> |
En fait, je n’arrive pas vraiment à placer au bon endroit les valeurs que je recherche, ce problème de contexte est lié à la fonction « for-each ». Ça paraît simple, mais je n'y arrive pas. J’ai essayé d’utiliser des templates sans parvenir à mes fins, l’un de vous pourrait m’aiguiller sur une solution ?