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

问题描述 投票:0回答:1

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

这就是我的 xpath:

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

使用上述 xpath 和 html

SelectNodes
调用
<div onclick="alert('test');"></div>
时,我返回 null。

var document = new HtmlDocument();

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

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

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

c# html-agility-pack .net-7.0
1个回答
0
投票

如果您使用

local-name()
函数,似乎可以工作。我认为这是 HtmlAgilityPack 中的一个错误。如果您查看
HtmlNodeNavigator.LocalName
here 的实现,它会说明
_attIndex
的设置并返回相应属性的名称。然而,
here
之后的HtmlNodeNavigator.Name的实现根本不考虑
_attIndex
。因此,在您的情况下,即使
HtmlNodeNavigator
当前可能通过
_attIndex
指向属性本身,对
.Name
属性的调用也会错误地返回
div
而不是
onclick

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

© www.soinside.com 2019 - 2024. All rights reserved.