C# Html 敏捷包 ( SelectSingleNode )

Posted

技术标签:

【中文标题】C# Html 敏捷包 ( SelectSingleNode )【英文标题】:C# Html Agility Pack ( SelectSingleNode ) 【发布时间】:2011-04-18 14:55:49 【问题描述】:

我正在尝试解析此字段,但无法使其正常工作。当前尝试:

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 是子节点什么的,这就是为什么我无法读取它?

【问题讨论】:

你试过调试吗?您的代码在哪一行失败?您编写的代码可以正常工作。 我贴出了失败的那一行。 您能展示一下加载 HTML 的代码吗?另外,你的链中的哪个对象是空的?您是否有多个具有相同 ID 的 H1 标签?您使用的是哪个版本的 HTML Agility Pack? 【参考方案1】:
 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]");可以按照上面的方法试试,希望对你有帮助

【讨论】:

【参考方案2】:
HtmlAgilityPack.HtmlNode name = doc.DocumentNode.SelectSingleNode("//h1[@id='my_name']").InnerText;

【讨论】:

【参考方案3】:

您的代码不起作用的原因是页面上的 javascript 实际上正在写出 &lt;h1 id='profile_name'&gt; 标记,因此如果您从用户代理(或通过 AJAX)请求页面t 执行 JavaScript 然后你将找不到元素。

我能够使用以下选择器获得自己的名字:

string name = 
    doc.DocumentNode.SelectSingleNode("//a[@id='navAccountName']").InnerText;

【讨论】:

这应该被标记为答案。这实际上帮助了我。动态生成的代码在这个 dll 中不起作用。【参考方案4】:

试试这个:

var name = doc.DocumentNode.SelectSingleNode("//@id='my_name'").InnerHtml;

【讨论】:

以上是关于C# Html 敏捷包 ( SelectSingleNode )的主要内容,如果未能解决你的问题,请参考以下文章

C# html 敏捷包按类名获取元素

Html 敏捷包 - 新的 HtmlAttribute

转载 C#中敏捷开发规范

HTML 敏捷包

HTML 敏捷包 - 解析表

HTML 敏捷包