YQL XSLT实现限制

时间:2010-08-18 07:56:19

标签: xslt yql

由于某种原因,YQL的XSLT表无法解析我的样式表。我已成功使用样式表与W3C的XSLT服务。以下是YQL Console中问题的一个示例。为什么这在YQL中不起作用?

此外,我还没有弄清楚如何将YQL查询的结果作为要转换的XML传递给XSLT表,同时还指定样式表URL。目前的解决方法是滥用W3C的服务。

2 个答案:

答案 0 :(得分:1)

您的样式表定义为1.0,但您使用的是replace()tokenize(),它是2.0标准的一部分。但它是一个完全有效的XSLT / XPath 2.0样式表。

答案 1 :(得分:1)

作为Per T答案的补充,请更改:

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

最后这个:

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

可能是:

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