C#Html敏捷包(SelectSingleNode)
我试图解析这个字段,但不能让它工作。当前尝试:C#Html敏捷包(SelectSingleNode)
var name = doc.DocumentNode.SelectSingleNode("//*[@id='my_name']").InnerHtml;
<h1 class="bla" id="my_name">namehere</h1>
错误:未将对象引用设置为对象的实例。
感谢任何帮助。
@John - 我可以保证HTML正确加载。我正在尝试阅读我的Facebook名称以进行学习。这里是Firebug插件的截图。我使用的版本是1.4.0。
http://i54.tinypic.com/kn3wo.jpg
我想这个问题是profile_name为一个子节点或什么的,这就是为什么我不能读它?
试试这个:
var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml;
不起作用。 “表达式必须评估为一个节点集。” – josh 2010-09-29 15:24:43
您的代码不工作的原因是因为有是实际写出<h1 id='profile_name'>
标签页面上的JavaScript,所以如果你从一个用户请求页面代理(或通过AJAX),不执行JavaScript,那么你不会找到该元素。
我可以使用下面的选择让我自己的名字:
string name =
doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText;
这应该被标记为答案。这实际上帮助了我。动态生成的代码不能在此dll中工作。 – 2012-06-29 21:09:01
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText;
public async Task<List<string>> GetAllTagLinkContent(string content)
{
string html = string.Format("<html><head></head><body>{0}</body></html>", content);
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var nodes = doc.DocumentNode.SelectNodes("//[@id='my_name']");
return nodes.ToList().ConvertAll(r => r.InnerText).Select(j => j).ToList();
}
这是确定用( “// A [@href]”);你可以像上面一样试试。希望对你有帮助
你试过调试吗?你的代码失败了什么?你写的代码能正常工作。 – 2010-09-29 03:53:14
我发布了它失败的行。 – josh 2010-09-29 15:23:41
你能展示加载你的HTML的代码吗?另外,链中的哪个对象为空?你有多个具有相同ID的H1标签吗?你使用的是什么版本的HTML敏捷包? – 2010-09-29 16:07:46