2017-10-18 6 views
2

J'ai un message XML comme suit:XSLT et pour-chaque

<message> 
<line number="1"><li>1</li><li>2</li><li>3</li></line> 
<line number="2"><li>x</li><li>y</li><li>z</li> 
</line> 
<line number="3"><li>a</li><li>b</li><li>c</li> 
</line> 
</message> 

Je me demande pourquoi le XSLT suivant ne retourne pas les <li> éléments, mais seulement ce qui est à l'intérieur <li></li>:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="utf-8" indent="no"/> 
<xsl:template match="/"> 
    <xsl:for-each select="/message/line"> 

line <xsl:value-of select="position()"/>: <xsl:value-of select="."/> 

    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

Par exemple: line 1: 123 au lieu de line 1: <li>1</li><li>2</li><li>3</li>

Répondre

2

C'est ce que xsl:value-of fait: il retourne la str valeur d'un noeud. Si vous voulez le garder comme arbre, utilisez xsl:copy-of. Par ailleurs, il n'y a pas de balises dans XSLT-land. Il ne voit que des nœuds. Les balises ont été transformées en nœuds par l'analyseur XML avant que XSLT ne passe à l'action.

+0

Merci beaucoup - c'est ce que je cherchais. – Christian68