凹进所有元素的值

  • 本文关键字:元素 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'。我该怎么做?

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

您应该用以下变量更改标题变量:

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

相关内容

  • 没有找到相关文章

最新更新