如何在C#中的HTML源代码中按类或id获取元素?

如何在C#中的HTML源代码中按类或id获取元素?,c#,html,parsing,html-agility-pack,C#,Html,Parsing,Html Agility Pack,我试图使用C#windows窗体应用程序,根据类或id名称从HTML源代码中获取元素。我使用WebClient将源代码放入字符串中,并使用HtmlDocument将其插入HTMLAlityPack 然而,我在HTMLAgilityPack包中找到的所有示例都是基于标记解析和查找项。我需要找到一个特定的id,比如html中的一个链接,并检索标签中的值。这可能吗?最有效的方法是什么?我试图解析出的所有ID都给了我异常。谢谢 您应该能够使用XPath实现这一点: HtmlDocument doc =

我试图使用C#windows窗体应用程序,根据类或id名称从HTML源代码中获取元素。我使用WebClient将源代码放入字符串中,并使用HtmlDocument将其插入HTMLAlityPack


然而,我在HTMLAgilityPack包中找到的所有示例都是基于标记解析和查找项。我需要找到一个特定的id,比如html中的一个链接,并检索标签中的值。这可能吗?最有效的方法是什么?我试图解析出的所有ID都给了我异常。谢谢

您应该能够使用XPath实现这一点:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"file.htm");

HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"my_control_id\"]");
string value = (node == null) ? "Error, id not found" : node.InnerHtml;
此处快速解释xpath:

  • /
    表示搜索路径中的所有位置,如果要匹配倍数,请使用
    SelectNodes
  • *
    表示匹配任何类型的节点
  • []
    定义“谓词”,基本上检查与此节点相关的属性
  • [@id=\“my\u control\u id\”]
    表示查找具有名为“id”且值为“my\u control\u id”的属性的节点

谢谢,我应该用这个代替HTMLAgilityPack吗?我正在用HtmlAgilityPack.HtmlDocument定义HtmlDocument。您的代码应该可以工作,但每次尝试执行时都会出现“对象引用未设置为对象实例”异常。我似乎不能仅仅使用HtmlDocument doc=new HtmlDocument();正如它所说的,它没有构造函数。我用的是HTMLAgilityPack。你有没有另外一个叫做HtmlDocument的类?也许可以尝试
HtmlAgilityPack.HtmlDocument doc=new HtmlAgilityPack.HtmlDocument()
也可以编辑示例以检查空节点。非常感谢您的帮助!是的,HtmlAgilityPack是我一直在使用的HtmlDocument。无论我在html源代码中选择哪个id或类,节点都会被返回为null,现在我得到的是错误消息而不是异常,这将是我最后一点要弄清楚的。也许看看
doc.ParseErrors
,看看它是否会在解析你的页面时出现?是的,那里似乎有填充的东西。我想这是另一个问题。再次感谢,非常有帮助!