C# Html Agility Pack selectnodes返回null
我正在Windows Phone 8设备上工作,并尝试使用html agility pack从中解析html文档。我可以轻松获得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-
标记,但现在我想从该文档中获得整个
标记。我试过这两种方法,但都不管用。这是我基于这些解决方案的实际代码
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