同配置同版本HtmlAgilityPack报XPathException错误,如何解决?
解决HtmlAgilityPack XPath查询中的Namespace Manager错误
嘿,这个问题我刚好碰到过,咱们一步步来搞定它!
问题根源
你现在抛出异常的代码里用了TextValue()这个函数,但它既不是标准XPath函数,也不是HtmlAgilityPack默认提供的自定义函数。而你之前成功的代码用的是text()——这才是能正确获取节点文本内容的标准XPath方法,这就是两个项目结果不同的核心原因。
当XPath解析器遇到TextValue()这种它不认识的函数时,会默认认为这是用户自定义的扩展函数,所以才会提示需要Namespace Manager或XsltContext来处理。
修复步骤
- 替换错误的函数名
把你的XPath查询里的TextValue()改成text(),修正后的完整代码如下:
var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlText); var tasksNodesCollection = htmlDoc.DocumentNode.SelectNodes("//p[text()=\"Paragraph:\"]/following-sibling::ul[1]//li");
- 处理文本匹配的边界情况(可选)
如果你的HTML里<p>标签的文本前后有空格、换行或者大小写不一致的情况,可以用normalize-space()函数来标准化文本,避免匹配失败:
var tasksNodesCollection = htmlDoc.DocumentNode.SelectNodes("//p[normalize-space(text())=\"Paragraph:\"]/following-sibling::ul[1]//li");
快速验证小技巧
你可以先测试简化版的XPath,比如//p[text()=\"Paragraph:\"],看看能不能正确定位到目标<p>节点,确认没问题后再加上后续的兄弟节点查询,这样更容易排查问题。
内容的提问来源于stack exchange,提问作者nellowl
相关产品推荐
相关产品推荐

