抛出异常:需要命名空间管理器或XsltContext

时间:2009-11-24 02:36:47

标签: c# xml xpath

我问一个关于使用XPath函数there

的问题

但是我遇到了关于这个例外的问题:

[System.Xml.XPath.XPathException] = {"Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function."}

xml如下:

<x-config>
    <!--user location-->
    <x-list>
      <Country code="TW,UK,MY" />
      <Country code="US,CA,MX" />
      <Country code="IN,PR,VI,IR" />
      <Country code="Others" /> 
    </x-list>

我使用以下代码来检索匹配项:

XmlNode countryNode = cdnConfig.SelectSingleNode(
    string.Format("x-config/x-list/Country[fn:contains(@code, {0})]", countryCode)
);

我是XPath的新手。任何人都可以详细说明这一点并给出一些解决方法吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

This SO question应该回答。

简而言之:无法识别XPath表达式中的fn前缀。您可以提供XmlNamespaceManager的实例来声明前缀,但由于.NET显然没有XPath 2.0支持,这无济于事。

但是,XPath 1.0已经支持contains函数,因此不需要XPath 2.0:

XmlNode countryNode = cdnConfig.SelectSingleNode(
    string.Format("x-config/x-list/Country[contains(@code, '{0}')]", countryCode)
);                                         ↑