2

我想使用 SelectNodes-Method 和 XPathNavigator-Class 从 XmlDocument-Object 中读取一些节点。

但是 C# 无法评估这个(使用 XMLSpy 验证)XPath-Expressen:

//LogicUnit[exists(Level[@val = 'R'])]/LogicLines[exists(LogicLine/DATAVIEW_SRC)]

运行时抛出 XPAthException “需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数。

我不理解这个例外,因为我的 XML 文档没有使用任何命名空间,也没有 XSLT 文档。如果我使用任何 XPATH 函数,总是会出现此异常。

4

3 回答 3

4

XPath 函数exists() 是在XPath 2.0 中定义的,但是.NET 中默认的Microsoft XPath 引擎只支持XPath 1.0。如果您想要在 .NET 下运行的 XPath 2.0 引擎,请尝试 Saxon 或 XQSharp。

于 2011-10-20T09:51:50.027 回答
1

原因是它不能在没有命名空间管理器的情况下使用函数,但是,您不需要使用函数,并且您的代码以错误的方式使用该函数。从我看到你正在使用的内容来看,你不需要函数 exists() 来查看是否存在

//LogicUnit[exists(Level[@val = 'R'])]

你的意思是

//LogicUnit[Level[@val = 'R']]
于 2011-10-20T09:01:22.513 回答
1

使用//LogicUnit[count(Level[@val = 'R']) > 0]。

于 2011-10-20T08:59:27.813 回答