HTML Agility Pack 与属性名称开头的 xpath 不匹配

HTML Agility Pack not matching xpath where attribute name starts-with

提问人:Kenshin 提问时间:9/30/2023 最后编辑:SachinKenshin 更新时间:10/1/2023 访问量:93

问:

我正在尝试选择节点包含名称以“on”开头的属性的所有 HTML 节点。

这是我为 XPath 准备的:

//*[@*[starts-with(name(), 'on')]]

使用上面的 xpath 和 html 调用时,我得到了 null 。SelectNodes<div onclick="alert('test');"></div>

var document = new HtmlDocument();

document.LoadHtml("<div onclick=\"alert('test');\"></div>");

var nodes = document.DocumentNode.SelectNodes("//*[@*[starts-with(name(), 'on')]]");

我已经在几个 XPath 测试站点(https://www.freeformatter.com/xpath-tester.html#before-outputhttp://xpather.com/)上测试了 XPath,它们都返回了 div 节点。xpath 函数不能与 HTML Agility Pack 一起使用吗?我是否需要对 HTML Agility Pack 做一些不同的事情?

C# html-敏捷包 .net-7.0

评论


答:

1赞 Chris Yungmann 9/30/2023 #1

如果您改用该功能,似乎可以工作。我认为这是 HtmlAgilityPack 中的一个错误。如果你看一下这里的实现,它考虑了被设置,并返回相应属性的名称。但是,此处的实现根本没有考虑 。因此,在您的例子中,即使 当前可能通过 指向属性本身,对属性的调用也会错误地返回而不是 。local-name()HtmlNodeNavigator.LocalName_attIndexHtmlNodeNavigator.Name_attIndexHtmlNodeNavigator_attIndex.Namedivonclick

我会在他们的 GitHub 存储库中提出问题