如果艺术家元素的总数大于x,我想写出所有艺术家元素。我有以下xml:
<catalog>
<cd>
<title>Empire Burlesque</title>
</cd>
<cd>
<title>Hide your heart</title>
<artist scale="28">Bonnie Tyler</artist>
</cd>
<cd>
<title>Greatest Hits</title>
<artist scale="30">Dolly Parton</artist>
</cd>
<cd>
<title>Still got the blues</title>
<artist scale="24">Gary Moore</artist>
</cd>
我在xsl中有以下内容:
<xsl:for-each select="/">
<xsl:if test="count(catalog/cd/artist) > 26">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
</xsl:for-each>
我做错了什么?
答案 0 :(得分:1)
您的XSLT代码中存在多个错误:
titles
代替title
xsl:for-each
中选择了根节点,但尝试使用xsl:value-of
这是一个满足您要求的样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/catalog">
<xsl:if test="count(cd) > 2">
<xsl:for-each select="cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
我做错了什么?
首先,这个:
<xsl:for-each select="/">
将您置于根节点的上下文中。从这个上下文,指令:
<xsl:value-of select="artist"/>
不返回任何内容,因为当前节点没有artist
子节点。即使它有,只返回第一个的值(在XSLT 1.0中)。如果要将它们作为单个表行/单元格写出,则需要使用xsl:for-each
或xsl:apply-templates
来处理后代节点。
至于:
<xsl:value-of select="titles"/>
输入中根本没有这样的节点