我正在try Select 其 node 包含名称以‘on’开头的属性的所有HTML node .

以下是我为XPath准备的内容:

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

当我使用上面的XPath和html <div onclick="alert('test');"></div>呼叫SelectNodes时,我得到的结果是空的.

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 node .XPath函数不能与HTML Agility Pack一起使用吗?我需要为HTML敏捷包做一些不同的事情吗?

推荐答案

如果您改用local-name()函数,似乎还能用.我认为这是HtmlAgilityPack中的错误.如果您查看HtmlNodeNavigator.LocalName here的实现,它会说明_attIndex被设置并返回相应属性的名称.然而,here之后的HtmlNodeNavigator.Name的实施根本不占_attIndex的比例.因此,在您的例子中,即使HtmlNodeNavigator当前可能通过_attIndex指向属性本身,对.Name属性的调用错误地返回div而不是onclick.

我会file an issue in their GitHub repo岁的.

Csharp相关问答推荐

ASP.NET Core 8 Cors标题未显示

List T.AddRange在传递ConcurrentDictionary作为参数时引发ArgumentExcellent

C# uwp中的Win11启动屏幕剪辑工作方式不同

Serilog SQL服务器接收器使用UTC作为时间戳

==和Tuple对象的相等<>

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

在发布表单时绑定包含附加(嵌套)列表的对象列表的正确语法是什么

使用预定义对象减少Task.Run/Factory.StartNew中的关闭开销

在此系统上已禁用获取正在运行的脚本.&在ASP.NET Core Web API中

NET8 Maui&;iOS:AppCenter崩溃错误

在C#中,非静态接口方法的抽象和虚拟是冗余的吗?

Polly重试URL复制值

带有列表参数的表达式树

为值对象编写自定义JsonConverter

EF Core:如何对关系属性进行建模?

如何在Polly重试策略成功之前将HttpClient请求排队?

如何使用ODP.NET C#设置Oracle会话时间长度限制

如何阻止可传递依赖项出现在项目中

如何保存具有多个重叠图片框的图片框?

这是T自身的布尔表达式是什么意思?