如何在C#中使用类似exists()的XPath函数?

时间:2011-10-20 08:53:13

标签: c# xml xpath-2.0 xpathnavigator

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

但是C#无法对此进行评估(使用XMLSpy验证)XPath-Expressen:

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

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

我不明白这个异常,因为我的XML-Document没有使用任何命名空间,也没有XSLT-Document。如果我正在使用任何XPATH函数,则会出现此异常。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

你的意思是

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