为什么在使用带有c#XPathNavigator的XPathIf-then-else表达式时得到无效标记?

为什么在使用带有c#XPathNavigator的XPathIf-then-else表达式时得到无效标记?,c#,xml,xpath,xpathnavigator,C#,Xml,Xpath,Xpathnavigator,我在尝试通过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() ?? str

我在尝试通过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:“”如果(//DovizCins='YTL'),则“1”或“2”具有无效令牌。“

Microsoft的Xml技术已经过时。这就是2007年推出的XPath 2.0语法,微软还没有赶上:他们仍在推出XPath 1.0。

我完全同意Michael Kay的观点

官方MS文档有误:

摘录

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

MS SQL Server部分支持XQuery 1.0和XPath 2.0。
Net framework不支持任何XQuery,它的XPath是1.0

我认为表达式缺少一个=并且应该是DovinzCins==”,但这里它说有处理XPath 2.0的类和方法,它说的是支持XPath 2.0数据模型,而不是XPath 2.0语言。(他们不是不诚实,就是在做2.0的一半时停了下来)。另见