2013-06-25 2 views
1

J'ai un xml comme la structure ci-dessous.Valeur de concat de tous les éléments

<?xml version="1.0" encoding="ISO-8859-1"?> 

<bookstore> 
    <book> 
      <title lang="eng">Harry Potter</title> 
      <price>29.99</price> 
    </book> 

    <book> 
      <title lang="eng">Learning XML</title> 
      <price>39.95</price> 
    </book> 
</bookstore> 

J'ai extrait tous les nœuds title comme <xsl:variable name="titles" select="/bookstore/book/title"/>. Maintenant, je voudrais concatuer ces titres enfermant chacun d'eux dans des guillemets simples et puis les séparant par des virgules et les stocker dans une variable de sorte que la sortie ressemble à: 'Harry Potter','Learning XML'. Comment puis je faire ça?

Répondre

1

Une liste connue des valeurs peut être « mis en place » par concat(). Mais dans votre cas, vous ne savez pas combien d'articles appartiennent à votre liste (en titels), la seule possibilité de XLST-1.0 est itérer aux éléments (for-each ou apply-templates et les concat

Essayez ceci:.

<xsl:variable name="titles" select="/bookstore/book/title"/> 
    <xsl:variable name="titles_str" > 
     <xsl:for-each select="$titles" > 
      <xsl:if test="position() > 1 ">, </xsl:if> 
      <xsl:text>'</xsl:text> 
      <xsl:value-of select="."/> 
      <xsl:text>'</xsl:text> 
     </xsl:for-each> 
    </xsl:variable> 
    <xsl:value-of select="$titles_str"/> 
0

Vous devez changer vos titres variables avec celui-ci:

<xsl:variable name="titles"> 
    <xsl:for-each select="/bookstore/book/title"> 
     <xsl:text>'</xsl:text><xsl:value-of select="."/><xsl:text>'</xsl:text> 
     <xsl:if test="position()!=last()">, </xsl:if> 
    </xsl:for-each> 
    </xsl:variable> 

pour obtenir la sortie souhaitée:

'Harry Potter', 'Learning XML' 
Questions connexes