gpt4 book ai didi

html - 使用 HTML Agility Pack 查询 HTML 中的 ID 时出现异常

转载 作者:搜寻专家 更新时间:2023-10-31 23:14:13 25 4
gpt4 key购买 nike

我正在使用 HTML Agility 包在 Visual Studio 中解析 A​​SPX 文件。

我正在搜索具有指定 ID 属性的元素。

我使用的代码是:

var html = new HtmlAgilityPack.HtmlDocument();
html.LoadHtml(docText);
if (html.DocumentNode != null)
{
try
{
var tagsWithId = html.DocumentNode.SelectNodes(string.Format("//[@id='{0}']", selector.Id));

但是,当我运行这段代码时,它会抛出异常“表达式必须评估为节点集”。

谁能告诉我为什么这个“必须”求值为节点集?为什么它不能简单地不返回任何节点(下一行调用 tagsWithId.Count)?确定 SelectNodes 方法返回的 HtmlNodeCollection 可以包含 0 个节点?

或者错误是由于格式错误的 Xpath 表达式造成的? [我正在测试的选择器 ID 肯定以

的形式存在于文件中。]

是否可以直接从 Visual Studio 加载 ASPX 文件(我正在构建一个加载项)或者它是否包含 XML 错误,我是否必须加载输出 HTML 流( 在文件开头没有页面声明,。)?

最佳答案

问题出在 SelectNodes() 的参数中:

//[@id='{0}']

(执行替换后)不是语法上合法的 XPath 表达式。所以问题不在于 XPath 表达式“不返回任何节点”——问题在于它在语法上是非法的。

根据 XPath W3C 规范:

///descendant-or-self::node()/的缩写”

因此上面的内容被扩展为:

/descendant-or-self::node()/[@id='{0}']

请注意,最后一个定位步骤没有节点测试,并且以谓词开始。根据 XPath 的语法规则,这是非法的。

可能你想要:

//*[@id='{0}']

关于html - 使用 HTML Agility Pack 查询 HTML 中的 ID 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3174688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com