我是stackoverflow的新手,我希望我的问题不要奇怪......
我想只下载svalue
元素的sindex
内的文字,以及另一个<p>
标记的内容。这是它的层次结构:
/html/body/table/tbody/tr[2]/td/table/tbody/tr/td/table/tbody/tr[3]/td/table/tbody/tr/td/table/tbody/tr/td/table[4]/tbody/tr[2]/td[2]/table/tbody/tr/td/div/span/span/p/span/sindex
可以按层次结构下载内容吗?以HtmlAgilityPack为例,还是以其他方式?
由于
WebClient client = new WebClient();
string url = "http://www.google.com";
var content = client.DownloadString(url);
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(content);
// ?
在@MSI回答之后更新,我使用此:
var value = doc.DocumentNode
.SelectSingleNode("//html/body/div/div/a/div");
但返回值始终为null。我以错误的方式得到了等级制度。我使用firebug并查看html选项卡的层次结构,是不是错了?
答案 0 :(得分:0)
你不能使用
的内容*将svalue视为属性:
doc.DocumentNode
.SelectSingleNode("//html/element1/element2")
.Attributes["svalue"].Value;
或元素,
doc.DocumentNode
.SelectSingleNode("//html/element1/element2/svalue").InnerText;
修改强>:
重新。使用google.com.au作为参考HTML源的SelectSingleNode为我之前的示例返回null使用以下方法来获得所需的结果。
doc.DocumentNode
.SelectSingleNode(".//element1/element2/svalue").InnerText;
DocumentNode应该引用html文档的根节点,而.//是相对于它的。