所有元素的Concat值

时间:2013-06-25 05:21:15

标签: xslt xslt-1.0

我有一个类似于以下结构的xml。

<?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>

我已将所有title个节点提取为<xsl:variable name="titles" select="/bookstore/book/title"/>。现在,我想将这些标题用单引号括起来然后用逗号分隔它们并将它们存储在变量中,以便输出看起来像:'Harry Potter','Learning XML'。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您应该使用以下内容更改titles变量:

  <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>

获得所需的输出:

'Harry Potter', 'Learning XML'

答案 1 :(得分:2)

concat()可以将已知的值列表“放在一起”。但在你的情况下,你不知道你的列表中有多少项(在标题中),xlst-1.0中唯一的可能性是迭代到元素(for-eachapply-templates并连接它们。 / p>

试试这个:

    <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"/>