为啥我在使用带有 c# XPathNavigator Evaluate 的 Xpath if-then-else Expression 时得到一个无效的令牌?
Posted
技术标签:
【中文标题】为啥我在使用带有 c# XPathNavigator Evaluate 的 Xpath if-then-else Expression 时得到一个无效的令牌?【英文标题】:why I get an invalid token while using Xpath if-then-else Expression with c# XPathNavigator Evaluate?为什么我在使用带有 c# XPathNavigator Evaluate 的 Xpath if-then-else Expression 时得到一个无效的令牌? 【发布时间】:2020-12-08 11:46:54 【问题描述】:尝试通过 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'' has an invalid token.'
【问题讨论】:
我认为表达式缺少一个 =,它应该是 DovinzCins == "" 【参考方案1】:我完全同意迈克尔·凯的观点。
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 Server 部分支持。 .Net 框架不支持任何 XQuery,其 XPath 为 1.0
【讨论】:
【参考方案2】:Microsoft 的 XML 技术已经过时了。这是 2007 年推出的 XPath 2.0 语法,微软尚未赶上:他们仍在发布 XPath 1.0。
【讨论】:
但是这里说有处理xpath 2.0的类和方法docs.microsoft.com/en-us/dotnet/api/… 它谈到支持 XPath 2.0 数据模型,但不支持 XPath 2.0 语言。 (他们要么是不诚实,要么他们在完成 2.0 的过程中完成了一半,然后就停止了)。另见***.com/questions/46805830/…以上是关于为啥我在使用带有 c# XPathNavigator Evaluate 的 Xpath if-then-else Expression 时得到一个无效的令牌?的主要内容,如果未能解决你的问题,请参考以下文章
为啥c#可以在android和iOS上制作带有GUI的程序而c++不能? [关闭]
为啥我在尝试从 C# 处理程序发布 GraphQL 查询时收到错误请求?
我在 linux 上使用带有 C# 的 .net 核心,缺少 lib System.Drawing
为啥我在 C# 中收到“无法读取属性 HRESULT:0x80650002”?