我不明白为什么xsl:param给我一个错误'Keyword xsl:param可能不会在名称空间http://www.w3.org/TR/WD-xsl中使用。在以下带有样式表声明的xsl代码中。
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="uri:xsl">
给出xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd n="a">
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
和xsl代码
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="uri:xsl">
<xsl:param name="test" select="'a'"/>
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:choose>
<xsl:when match=".[@n = $test]">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我无法更改样式表声明。查看w3c文档,我可以将param声明为样式表的子项,而不需要在模板中。
答案 0 :(得分:2)
如果你的东西不在命名空间http://www.w3.org/1999/XSL/Transform中,那么它不是XSLT样式表,我不知道它是什么。没有XSLT处理器会对它做任何有用的事情。命名空间“uri.xsl”可能有某种语言,但如果存在,我从未遇到它,我不知道它可能是什么。
答案 1 :(得分:1)
我在你的xslt中看到了三个错误:
1)在转换开始时有两条处理指令。你应该只使用一个,如果有的话。
2)stylesheet元素的名称空间应为http://www.w3.org./1999/XSL/Transform
3)您缺少样式表版本属性
除了这些要点之外,你的样式表也应该有效。