You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET6中HtmlAgilityPack筛选my:fdivid属性节点的问题

解决方案:筛选带有my:fdivid属性的HTML节点

针对你使用HtmlAgilityPack 1.11.46遇到的问题,有两种可靠的方法可以获取目标节点:

方法1:使用XPath的属性名匹配(无需命名空间处理)

直接通过XPath匹配完整的属性名,避开命名空间解析问题:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load("path/to/your/html/file.html");

// 匹配所有包含名为'my:fdivid'属性的节点
var nodesWithFdivAttribute = htmlDoc.DocumentNode.SelectNodes("//*[@*[name()='my:fdivid']]");

原理:@*[name()='my:fdivid']会检查节点是否存在名称完全等于my:fdivid的属性,绕过XPath对命名空间前缀的解析逻辑。

方法2:使用LINQ遍历节点(更直观)

通过遍历所有后代节点,直接检查属性集合:

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.Load("path/to/your/html/file.html");

var nodesWithFdivAttribute = htmlDoc.DocumentNode.Descendants()
    .Where(node => node.HasAttributes && node.Attributes.Any(attr => attr.Name == "my:fdivid"))
    .ToList();

这种方法逻辑清晰,完全避免XPath的命名空间问题,适合对XPath语法不熟悉的场景。

为什么原方法失败?

HtmlAgilityPack的XPath解析器会将属性名中的冒号识别为XML命名空间前缀,因此要求提供NamespaceManager,但HtmlNode.SelectNodes方法并未提供接受XmlNamespaceManager的重载。而HTML中的自定义属性带冒号通常并非真正的XML命名空间,因此上面两种方法更贴合实际需求。

内容的提问来源于stack exchange,提问作者CrazyEight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:43:13