此查询:
SELECT *
FROM html
WHERE url='http://wwww.example.com'
AND xpath='//tr[@height="20"]'
返回XML:
<results>
<tr height="20">
<td height="20" width="425">
<p>Institution 0</p>
</td>
<td width="134">
<p>Minneapolis</p>
</td>
<td width="64">
<p>MN</p>
</td>
</tr>
...
</results>
问题:
示例(语法无效):
SELECT td[position()=1]/p/. AS name, td[position()=2]/p/. AS city, td[position()=3]/p/. AS region
FROM ...
目标:
<results>
<tr height="20">
<name>Institution 0</name>
<city>Minneapolis</city>
<region>MN</region>
</tr>
...
</results>
答案 0 :(得分:1)
与XPath不同,正如您尝试的那样。但是,可以使用YQL将XSL Transformations应用于XML / HTML文档。这是一个例子:
<强> XSLT 强>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<rows>
<xsl:apply-templates select="descendant::tr" />
</rows>
</xsl:template>
<xsl:template match="//tr">
<row>
<name>
<xsl:value-of select="td[1]/p" />
</name>
<city>
<xsl:value-of select="td[2]/p" />
</city>
<region>
<xsl:value-of select="td[3]/p" />
</region>
</row>
</xsl:template>
</xsl:stylesheet>
<强> HTML 强>
<html>
<body>
<table>
<tr height="20">
<td height="20" width="425">
<p>Institution 0</p>
</td>
<td width="134">
<p>Minneapolis</p>
</td>
<td width="64">
<p>MN</p>
</td>
</tr>
<tr height="20">
<td height="20" width="425">
<p>Institution 1111</p>
</td>
<td width="134">
<p>Minneapolis 1111</p>
</td>
<td width="64">
<p>MN 11111</p>
</td>
</tr>
</table>
</body>
</html>
YQL查询
select * from xslt where stylesheet="url/to.xsl" and url="url/to.html"
YQL结果
<results>
<rows>
<row>
<name>Institution 0</name>
<city>Minneapolis</city>
<region>MN</region>
</row>
<row>
<name>Institution 1111</name>
<city>Minneapolis 1111</city>
<region>MN 11111</region>
</row>
</rows>
</results>