2010-08-18 142 views
0

由於某些原因,YQL的XSLT表格無法解析我的樣式表。我已經使用W3C的XSLT服務成功地使用了樣式表。以下是YQL Console中的問題示例。爲什麼在YQL中不起作用?YQL XSLT實施限制

此外,我還沒有弄清楚如何將YQL查詢的結果作爲要轉換的XML傳遞給XSLT表,同時指定樣式表url。目前的解決方法是濫用W3C的服務。

+0

這不是好的做法在其他地方鏈接到大來源。你應該建立一個減少輸入樣本 – 2010-08-18 13:25:06

+0

我已經修剪了我正在處理的樣本XML文件。 – robartsd 2010-08-18 16:24:48

+0

在獲取XSLT的工作之前,我嘗試通過其餘的URL檢索YQL結果,但沒有發現問題,但是XSLT使用YQL結果作爲輸入沒有問題。 – robartsd 2010-08-18 20:01:44

回答

1

您的樣式表被定義爲1.0,但您使用的是replace()tokenize(),它是2.0標準的一部分。但它是一個完全有效的XSLT/XPath 2.0樣式表。

+0

謝謝。 XPath函數文檔中並不清楚這些是2.0函數。我試過改變聲明,但YQL仍然不喜歡它。我猜他們的實現是1.0。 – robartsd 2010-08-18 16:22:26

+0

將樣式表重寫爲1.0允許它在YQL中工作。 – robartsd 2010-08-18 17:47:53

1

作爲補充,以每噸答案,更改此:

<xsl:variable name="r"> 
<xsl:value-of select="replace(tr/td/p/a/following-sibling::text(), 
           '\s*-\s*(\d+)\.(\d+)\.(\d+)\s*', 
           '$1,$2,$3')" /> 
</xsl:variable> 

有了這個:

<xsl:variable name="r" 
     select="translate(tr/td/p/a/following-sibling::text(),'. -',',')"> 

這些:

tokenize($r,',')[1] 

tokenize($r,',')[2] 

tokenize($r,',')[3] 

有了這些:

substring-before($r,',') 

substring-before(substring-after($r,','),',') 

substring-after(substring-after($r,','),',') 

注意:這是以防萬一你不知道提前位數的金額,否則,你可以這樣做:

substring($r,1,2) 

substring($r,4,2) 

substring($r,7) 

此外,這

replace(tr/td/p[@class='t11bold']/a,'\s+',' ') 

它應該是眼前這個:

normalize-space(tr/td/p[@class='t11bold']/a) 

而且finaly這樣的:

replace($d,'^[^\[]*\[\s*(\d+:\d{2})?\s*-?\s*([^\]]*)\]\s*$','$2') 

可能是:

normalize-space(substring-after(substring-before(substring-after($d,'['),']'),'-')) 
+0

謝謝,規範化空間函數應該有助於避免依賴XPATH 2.0正則表達式。值可能是2位數字,所以我確實需要substring-before&-after解決方案。 – robartsd 2010-08-18 16:53:13

+0

您的建議對於將樣式表重寫爲1.0非常有幫助。 – robartsd 2010-08-18 17:48:58