2

我有一个类似于以下结构的 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'。我怎样才能做到这一点?

4

2 回答 2

3

一个已知的值列表可以由concat(). 但是在您的情况下,您不知道有多少项目属于您的列表(以标题为单位),xlst-1.0 中唯一的可能性是迭代元素(for-eachapply-templates连接它们。

尝试这个:

    <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"/>
于 2013-06-25T06:33:34.827 回答
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'
于 2013-06-25T06:15:34.087 回答