xsl:param命名空间错误(不能在命名空间中使用)

时间:2012-06-19 19:14:56

标签: xml xslt variables namespaces stylesheet

我不明白为什么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声明为样式表的子项,而不需要在模板中。

2 个答案:

答案 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)您缺少样式表版本属性

除了这些要点之外,你的样式表也应该有效。