0

我不明白为什么 xsl:param 给我一个错误“关键字 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 声明为样式表的子项,并且不需要在模板中。

4

2 回答 2

2

如果您的东西不在名称空间http://www.w3.org/1999/XSL/Transform中,那么它就不是 XSLT 样式表,我不知道还有什么。没有 XSLT 处理器可以用它做任何有用的事情。可能有某种命名空间为“uri.xsl”的语言,但如果有的话,我从来没有遇到过它,我也不知道它可能是什么。

于 2012-06-19T21:07:15.407 回答
1

我在您的 xslt 中看到三个错误:

1)您在转换开始时有两个处理指令。如果有的话,你应该只使用一个。

2) 样式表元素的命名空间应该是http://www.w3.org./1999/XSL/Transform

3)您缺少样式表版本属性

除了这些点之外,您的样式表应该可以工作。

于 2012-06-19T19:47:29.607 回答