.NET Core 3.1与.NET 5.0是否支持XPath 2.0?
根因说明
你遇到的*:前缀写法抛出无效令牌异常的核心原因是:.NET内置的默认XPath查询引擎仅原生支持XPath 1.0语法。
你提到的「支持XPath 2.0数据模型」是类库的数据类型兼容特性,和查询语法支持无关,*:命名空间通配符属于XPath 2.0新增的语法规则,默认的.NET XPath引擎不识别该语法,因此会直接抛出令牌校验异常。
可用方案说明
- 目前最通用的原生兼容方案就是你已经验证过的
local-name()写法,该函数属于XPath 1.0标准规范,全版本.NET环境都可正常运行:
string Val2 = nav.SelectSingleNode("/*[local-name()='AAA']/*[local-name()='SomeTag']/@Code", nsmgr).Value;
如果觉得每次手写local-name()比较繁琐,可以自行封装辅助方法批量生成忽略命名空间的XPath表达式。
2. 如果必须使用XPath 2.0的*:通配符写法,可以引入第三方XPath引擎类库,这类库完整实现了XPath 2.0及以上版本的所有语法特性,可直接运行你写的通配符格式XPath。
内容的提问来源于stack exchange,提问作者Megrez7
相关产品推荐
相关产品推荐

