我正在使用Windows Phone 8设备并尝试使用来自http://www.livescience.com/41480-3d-printed-kidneys-take-small-steps.html的html敏捷包解析html文档。我可以轻松获取<title>
标记,但现在我想获得整个{{1}该文档中的标记。我尝试了这两个解决方案one和two,但它不起作用。这是我基于这些解决方案的实际代码
<p>
我使用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
是否返回null。有人知道如何解决这个问题吗?我将不胜感激任何帮助。谢谢。
答案 0 :(得分:1)
尝试做:
p = doc.DocumentNode.SelectNodes(".//p");
而不是:
p = doc.DocumentNode.SelectNodes("//p");
因为p
是一种标记,而不是类或ID。
答案 1 :(得分:0)
您的代码没有任何问题,但它可能没有达到预期效果。 foreach
循环遍历所有段落(在提供的URL的情况下总共13个)。因为最后一段是空的,所以pr
在最后一次迭代后将为空。
如果你想用text2
填充所有段落,你应该改变代码:
pr += node.innerText;
如果您希望pr
包含可读文本,则需要解码innerText,因为它可以包含html实体,如>
。你可以这样做:
pr += HtmlEntity.DeEntitize(node.innerText);
希望这有帮助。