2012-06-19 68 views
0

我不明白爲什麼xsl:param給了我一個錯誤'Keyword xsl:param可能不會用在命名空間http://www.w3.org/TR/WD-xsl中。在下面的樣式表聲明的xsl代碼中。xsl:param命名空間錯誤(可能不會在名稱空間中使用)

<?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

查看w3c文檔,您首先不會使用XSL(附加到'xsl'前綴的名稱空間很重要)。 – Lucero

回答

2

如果你的東西不在命名空間http://www.w3.org/1999/XSL/Transform那麼它不是一個XSLT樣式表,我不知道它是什麼。沒有XSLT處理器可以做任何有用的事情。有可能是某種語言的命名空間「uri.xsl」,但如果有的話,我從來沒有遇到它,我不知道它可能是什麼。

1

我看到你的XSLT三個錯誤:

1)您有在變換的開始兩個處理指令。你應該只使用一個,如果有的話。

2)stylesheet元素命名空間應http://www.w3.org./1999/XSL/Transform

3)你缺少樣式表版本屬性

除了這幾點,你的樣式應該工作。

+0

我更新了上面的代碼。你對(1)是正確的,但是我需要聲明,因爲當匹配=「[@ n = $ test]」>時需要使用。反對 Steven

+0

@Steven,你對'uri:xsl'的評論沒有任何意義 - 你需要提供更多信息。 – Lucero

+0

我正在使用具有該聲明的遺留代碼。當我使用http://www.w3.org替換uri:xsl時./1999/XSL/Transform元素不再是函數,因爲它會是期待測試而不是比賽。 – Steven

相關問題