2012-09-05 52 views
2

我是XSLT新手,我正在使用w3schools「自己試試」頁面進行一些測試。我用下面的演示:position()= 1正常工作,但沒有定位()<5

http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=tryxsl_choose

這包含以下行:

<xsl:for-each select="catalog/cd"> 

我測試通過過濾position()呈現的HTML,但我使用的是<時有問題操作數。


我已經試過如下:

<xsl:for-each select="catalog/cd[position()=1]"> 

而這個返回從XML數據中的第一項(如預期)。


我然後設法:

<xsl:for-each select="catalog/cd[position()<5]"> 

我期待這回第4項,而是我沒有得到任何結果。

我的猜測是,也許position()=1正在做一個字符串比較,這就是爲什麼它返回第一個項目,但它不能理解position()<5作爲一個字符串不能用這種方式比較?

爲什麼會發生這種情況,以及獲得我希望實現的結果的正確語法是什麼?


更新:閱讀@ joocer的響應,並測試這個自己,用>操作不工作,爲相反的結果後:

<xsl:for-each select="catalog/cd[(position()>5)]"> 

回答

2

即使引號內,你必須鍵入<作爲&lt;,所以它不會混淆元素標記的開始。我認爲這樣做是爲了讓容錯解析器更容易從錯誤中恢復,並且流解析器可以更快地跳過內容。他們總是可以在CDATA之外尋找<,並且知道這是一個元素開始或結束標記。

+0

這似乎並不奏效:S''。嘗試編輯以下內容,並返回0結果http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=tryxsl_choose – Curt

+0

奇數。我從http://www.w3.org/TR/xpath/#booleans的第二個註釋中獲得了這些信息。它應該沒有關係,但嘗試在'<' –

+0

的任一側添加空白我試過這個但沒有成功。很奇怪。 – Curt

2

我不知道爲什麼,但反轉條件的作品,所以不是查找不到5,尋找不超過4

<xsl:for-each select="catalog/cd[not(position()>4)]"> 
+0

+1 This Works thanks,雖然我仍然有興趣知道爲什麼'<'不起作用。 – Curt

4

它看起來非常像w3schools正在使用的libxslt版本中的錯誤。

+0

似乎已經發現,w3schools測試平臺的問題在於他們破壞了進入他們文本區域的「<」符號。 –

相關問題