我有一个类似下面结构的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-each
或apply-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'