You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XPathSelectElement报'无效令牌'错误,多值XPath表达式是否合法?

问题解析和解决办法

表达式合法性说明

El[text()=('data2','xxx')] 是XPath 2.0及以上版本的合法语法,用来匹配文本值为data2或xxx的El节点。但.NET Framework 4.7.2自带的XPathSelectElement仅支持XPath 1.0,而XPath 1.0不支持这种多值元组的比较写法,这就是你触发XPathException报错的核心原因。

在线工具验证结果不一致,是因为不同工具默认支持的XPath版本不同:部分工具默认启用XPath 2.0+,所以验证通过;另一部分仅支持XPath 1.0,因此会报解析错误。

无需修改表达式的解决方案

既然你希望保留原表达式格式,推荐使用支持XPath 2.0+的第三方库替代原生XPath解析:

使用Saxon-HE(.NET版本)

Saxon是一款开源XML处理库,支持XPath 2.0/3.0/3.1,能直接解析你的多值表达式:

  1. 通过NuGet安装Saxon-HE包
  2. 示例代码:
using Saxon.Api;

// 加载XML文档
Processor processor = new Processor();
DocumentBuilder builder = processor.NewDocumentBuilder();
XdmNode doc = builder.Build(new FileInfo("你的XML文件路径.xml"));

// 执行XPath查询
XPathCompiler compiler = processor.NewXPathCompiler();
compiler.DeclareNamespace("", ""); // 根据你的XML实际命名空间调整
XdmValue result = compiler.Evaluate("El[text()=('data2','xxx')]", doc);

// 遍历结果节点
foreach (XdmNode node in result)
{
    // 这里编写节点处理逻辑
}

这个方案可以直接使用你现有的外部XPath表达式,不需要修改格式。

补充说明

如果因项目限制无法引入第三方库,那只能将表达式转换为XPath 1.0兼容的El[text()='data2' or text()='xxx']形式,但这是你希望避免的情况,优先级低于第三方库方案。

内容的提问来源于stack exchange,提问作者Andriy Kozachuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:02:35