2016-11-08 75 views
0

我跑这个代码linqpad:是否支持MS .net xpath实现的格式编号?

void Main() 
{ 
    //XElement doc = XElement.Load(new StringReader("<item><name>Some Name</name></item>")); 
    StringReader sr = new StringReader(@"<value>133445</value>"); 
    XDocument doc = XDocument.Load(sr); 
    Evaluate(doc, "/value/text()").Dump(); 
    Evaluate(doc, "format-number(/value/text(), '###,##0.00')").Dump(); 
} 

private static string Evaluate(XDocument e, string expression) 
{ 
    object o = e.XPathEvaluate(expression); 
    var objects = o as IEnumerable<object>; 
    if (objects != null) 
    { 
     return objects.FirstOrDefault()?.ToString(); 
    } 

    return o?.ToString(); 
} 

,输出是:

133445 

XPathException: 
Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function. 

主叫号格式失败,与上面的例外。是否有另一种方法来使用xpath函数格式化数字?

由于

+1

看起来像'format-number()'是一个[XPath 3.0函数](https://www.w3.org/TR/xpath-functions-30/#func-format- number)。在这种情况下,您需要支持XPath 3.0的XPath引擎,例如Saxon for .NET – har07

回答

0

格式数()最初在XSLT 1.0定义为(因此不XPath 1.0中提供)特定XSLT功能,并且它在规范的版本2.0保持这种方式。最后在XPath 3.0中找到了进入XPath的途径。