如何按层次结构下载元素的内容

时间:2013-06-17 00:20:16

标签: c# html dom html-agility-pack

我是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选项卡的层次结构,是不是错了?

1 个答案:

答案 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文档的根节点,而.//是相对于它的。