0

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

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

4

2 回答 2

2

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

于 2010-08-18T09:04:18.897 回答
2

作为 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,'['),']'),'-'))
于 2010-08-18T13:23:13.590 回答