C# Html Agility Pack selectnodes返回null

C# Html Agility Pack selectnodes返回null,c#,html-parsing,html-agility-pack,C#,Html Parsing,Html Agility Pack,我正在Windows Phone 8设备上工作,并尝试使用html agility pack从中解析html文档。我可以轻松获得标记,但现在我想从该文档中获得整个标记。我试过这两种方法,但都不管用。这是我基于这些解决方案的实际代码 private void loadDoc() { try { HtmlWeb.LoadAsync("http://www.livescience.com/41480-3d-printed-kidneys-

我正在Windows Phone 8设备上工作,并尝试使用html agility pack从中解析html文档。我可以轻松获得
标记,但现在我想从该文档中获得整个
标记。我试过这两种方法,但都不管用。这是我基于这些解决方案的实际代码

private void loadDoc()
    {
        try
        {
            HtmlWeb.LoadAsync("http://www.livescience.com/41480-3d-printed-kidneys-take-small-steps.html", Html_Completed);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }

    private void Html_Completed(object sender, HtmlDocumentLoadCompleted e)
    {
        doc = e.Document;
        title = doc.DocumentNode.SelectSingleNode("//title");
        p = doc.DocumentNode.SelectNodes("//p");
        foreach(var node in p)
        {
          pr = node.InnerText; //that's the text you are looking for
        }
        text1.Text = title.InnerText;
        if (!pr.Equals("") && pr != "")
        {
            text2.Text = pr;
        }
        else
        {
            MessageBox.Show("null");
        }
    }

我使用
if
块来确定
foreach
是否返回null。有人知道如何解决这个问题吗?我将感谢任何帮助。谢谢。

您的代码没有问题,但可能没有达到预期效果。
foreach
循环迭代所有段落(对于提供的url,总共13段)。因为最后一段是空的,
pr
在最后一次迭代后将是空的

如果要用所有段落填充
text2
,则应按如下方式更改代码:

pr += node.innerText;
pr += HtmlEntity.DeEntitize(node.innerText);
如果希望
pr
包含可读文本,则需要解码内部文本,因为它可以包含类似
的html实体。您可以这样做:

pr += node.innerText;
pr += HtmlEntity.DeEntitize(node.innerText);
希望这能有所帮助。

尝试以下操作:

p = doc.DocumentNode.SelectNodes(".//p");
而不是:

p = doc.DocumentNode.SelectNodes("//p");
因为
p
是一种标记类型,而不是类或id