为什么我在将 Xpath if-then-else 表达式与 c# XPathNavigator Evaluate 一起使用时得到无效令牌?

why I get an invalid token while using Xpath if-then-else Expression with c# XPathNavigator Evaluate?

我在尝试通过 XpathNavigor 评估以下表达式时收到无效令牌异常:

var expression = if(//DovizCins = 'YTL') then '1' else '2';

var nav = doc.CreateNavigator();
XPathExpression xp = XPathExpression.Compile(expression);
var value = nav.Evaluate(xp);

return value?.ToString() ?? string.Empty;

例外情况是:

System.Xml.XPath.XPathException: ''if(//DovizCins = 'YTL') then '1' else '2'' 有一个无效的标记。'

Microsoft 的 XML 技术已经过时了。这是 2007 年推出的 XPath 2.0 语法,Microsoft 尚未赶上:他们仍在发布 XPath 1.0。

我完全同意 Michael Kay 的观点。

MS官方文档有误:https://docs.microsoft.com/en-us/dotnet/api/system.xml.xpath?view=netframework-4.7.1

节选

"...System.Xml.XPath 命名空间包含 类 定义用于导航和编辑 XML 信息项的游标模型作为 XQuery 1.0 的实例和 XPath 2.0 数据模型..."

XQuery 1.0 和 XPath 2.0 部分受 MS SQL 服务器支持。 .Net框架不支持任何XQuery,其XPath为1.0