如何在c#中使用像exists()这样的xpath函数

本文关键字:函数 xpath exists | 更新日期: 2023-09-27 18:11:53

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

但是c#无法计算这个(用XMLSpy验证)XPath-Expressen:

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

运行时抛出xpatheexception "Namespace Manager或XsltContext所需的。该查询具有前缀、变量或用户定义函数。"

我不理解这个异常,因为我的XML-Document不使用任何名称空间,也没有XSLT-Document。如果使用任何xpath函数,则总是出现此异常。

如何在c#中使用像exists()这样的xpath函数

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

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

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

你指的是

//LogicUnit[Level[@val = 'R']]

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