1

我是stackoverflow的新手,我希望我的问题不会很奇怪..

我只想下载元素内的文本svaluesindex以及另一个<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");

但返回值始终为空。也许我以错误的方式获得了层次结构。我使用 firebug 并查看 html 选项卡的层次结构,这是错误的吗?

4

1 回答 1

0

你不能使用类似的东西,

*将 svalue 视为一个属性:

doc.DocumentNode
    .SelectSingleNode("//html/element1/element2")
    .Attributes["svalue"].Value;

或对于元素,

doc.DocumentNode
    .SelectSingleNode("//html/element1/element2/svalue").InnerText;

编辑

关于。SelectSingleNode 为我之前使用 google.com.au 作为参考 HTML 源的示例返回 null 使用以下方法来设置所需的结果。

doc.DocumentNode
    .SelectSingleNode(".//element1/element2/svalue").InnerText;

DocumentNode 应该引用 html 文档根节点,而 .// 是相对于该节点的。

于 2013-06-17T01:04:17.560 回答