我试图在同一个查询中获取股票价格和时间戳,以便只对服务器进行一次调用
select *
from html
where url="http://getquote.icicidirect.com/NewSiteTrading/trading/equity
/includes/trading_stock_quote.asp?Symbol=BSES"
and (
xpath='//table[@class="projection"][2]//tr[td/p/text()="LAST TRADE PRICE"]/td[2]/p/text()
| //table[@class="projection"][2]//tr[td/p/text()="LAST TRADED TIME"]/td[5]/p/text()'
它给了我以下结果
<results>385.6515:47:38</results>
但是我希望将这些结果用于标记分隔符,例如
<results>
<price>385.65</price>
<timestamp>15:47:38<timestamp>
</results>
任何包含这些常量的方法?
答案 0 :(得分:1)
您不能简单地使用XPath创建新节点,但您可以按照返回节点而不是文本内容的方式更改它。
目前,您的XPath最后使用text()
来获取表格单元格内的文本内容。您可以通过稍微更改查询来调整此值以返回p
节点:
xpath='//table[@class="projection"][2]//tr[td/p/text()="LAST TRADE PRICE"]/td[2]/p | //table[@class="projection"][2]//tr[td/p/text()="LAST TRADED TIME"]/td[5]/p'
这将为每个查询返回两个p
个节点,这可能有助于对结果进行所需的处理。
(顺便说一下,当我检查URL时,最低级别没有p
个节点,因此查询没有返回任何结果。您应该检查页面的当前HTML是否仍然包含{{1您期望的元素。)
此外,您可能会发现使用XPath-Axis-Operations导航到所需结果而不是使用固定数字过滤器很有用,如下所示:
p
通过过滤同级轴,您可以跳转到相对于当前结果的节点,因此在示例中,它找到xpath='//td[p/text()="LAST TRADE PRICE"]/following-sibling::td[2]/p | //td[p/text()="LAST TRADED TIME"]/preceding-sibling::td[1]/p'
LAST TRADE PRICE
节点并移动到后面的第二个兄弟{{1节点。
第二部分导航到内容为td
的{{1}}节点,然后选择预先显示的td
兄弟节点。
使用XPath-Axis,即使返回的网页中有更多行,您仍然可以获得正确的结果 - 如果表格是动态的,这可能会派上用场。