2009-10-27 5 views
0
<xml> 
    <data> 
    <Attribute name='forms'> 
     <List> 
      <String>xform</String> 
      <String>yform</String> 
     </List> 
     </Attribute> 
    </data> 
    </xml> 

Comment est-ce que je définirais mon xslt pour obtenir toutes les valeurs dans la liste. Donc, je voudrais sortir les deux valeurs dans 1 ligne séparée par |. Par ex.l'analyse de plusieurs lignes dans une ligne dans XSLT

xform | yform

+0

mais la chose est que j'ai d'autres attributs à ce niveau aussi, donc im déjà fait donc je voulais filtrer par comme Attribute [@ name = 'formes'] ... puis appliquer la logique – user140736

Répondre

1

Ceci est juste une façon, en supposant l'exemple d'entrée simple.

<xsl:template match="/"> 
    <xsl:for-each select="//String"> 
    <xsl:value-of select="."/><xsl:if test="not(position() = last())">|</xsl:if> 
    </xsl:for-each> 
</xsl:template> 

Voici une règle de modèle plus spécifique si je comprends le commentaire que vous avez ajouté. Ce serait génial si la personne qui a commenté l'utilisation de last() afficherait aussi un échantillon.

<xsl:template match="Attribute[@name='forms']"> 
    <xsl:for-each select="List//String"> 
    <xsl:value-of select="."/><xsl:if test="not(position() = last())">|</xsl:if> 
    </xsl:for-each> 
</xsl:template> 
+0

darn j'ai pris trop de temps ... –

+1

Sauf si quelque chose a changé depuis que je suis impliqué dans XSLT, le motif est généralement de tester pour position()> 1 et le préfixer, comme cela est moins cher à calculer pour le moteur XSLT. La fonction last() nécessite que le moteur XSLT regarde vers l'avant et trouve la dernière correspondance pour voir si la dernière est la dernière, ce que vous ne voulez pas faire. –

Questions connexes