当调用format-number XPath函数时,我收到错误:"需要命名空间管理器或XsltContext。"

时间:2018-03-28 14:42:20

标签: c# xml xslt xpath xelement

我正在尝试评估一个XPath表达式,该表达式包含C#方法format-number中的函数XPathEvaluate(XNode, String)。简化的复制如下:

// In this example, the XML is not actually used; written purely to demonstrate the issue
XElement test =  new XElement("test", 12);
object output = test.XPathEvaluate("format-number(2, \"00\")");

运行时会抛出以下异常:

  

System.Xml.XPath.XPathException :'需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。'

我尝试将XSLT命名空间添加到XmlNamespaceManager,然后根据异常消息和answer to a similar question的建议将其提供给XPathEvaluate函数,但这也是不工作:

var manager = new XmlNamespaceManager(new NameTable());
manager.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform");
test.XPathEvaluate("format-number(2, \"00\")", manager);

如何在XPath语句中调用format-number函数?

1 个答案:

答案 0 :(得分:2)

不幸的是,MS XPath不支持format-number功能。它不包含很多XSLT的功能。您可以在帖子this source找到图片中的所有支持功能。

但你必须在这里创建自己的功能。在上面的文章中,您可以找到我的3个函数示例(if-else,format和current)。

抱歉,我的母语是俄语,但有翻译按钮。因此,您只需要查看第一张图片并查看第一个here链接中的示例代码。我希望您可以复制代码并实现format-number所需的功能。