我正在尝试从下面的网址(Google财经)中解析表格
http://www.google.com/finance/historical?q=BOM:533278
我正在尝试仅提取关闭列中的关闭值。但是当我尝试使用XPATH
时hd.DocumentNode.SelectSingleNode("//td[@class='rgt']")
我在一个 Node.innerText 本身中获得了将属性作为类和属性值作为rgt的所有节点。
我需要一个接一个的值,而不是所有的值。我必须在这里做些傻事。谢谢。
使用Firebug找到的实际XPath是以下
/html/body/div/div/div[3]/div[2]/div/div[2]
/div[2]/div/form/div[2]/table/tbody/tr[2]/td[5]
但是有些如何在form标签之后... HTMLagility包返回null节点。从来没有想过要花这么长时间才能实现。
答案 0 :(得分:2)
如果您使用 Firebug 或任何 Firefox 扩展程序(例如 XPather )来获取XPath
元素需要解析,您可能需要从XPath中删除tbody
标记。
在SO上查看以下答案:Why does firebug add <tbody> to <table>?
如果您使用的是 HtmlAgilityPack ,则 Firebug 返回的XPath
或与 Firefox 相关的任何其他工具可能会有所不同,因为您正在解析的 HTML源代码可能与Firefox中的HTML源代码不同。
有时在 Internet Explorer 8 中打开同一页面并使用开发人员工具(F12)执行与Firebug相同的操作可能会有用,或者如果没有,使用可以从HtmlAgilityPack page
下载的 HAP Explorer 等其他工具答案 1 :(得分:0)
关闭列中第一个单元格的XPath为//div[@id='prices']/table/tbody/tr[2]/td[5]
,第二个单元格的XPath为//div[@id='prices']/table/tbody/tr[3]/td[5]
,依此类推。
答案 2 :(得分:0)
有很多方法可以做到这一点。这是一个解决方案,它基于Data td(与'lm'类一起):
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
... load the doc ...
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='lm']/../td[5]"))
{
Console.WriteLine("node=" + node.InnerText);
}