2016-11-08 2 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

フォーマット番号()本来(XPath 1.0の中従って利用できない)XSLT固有関数として、XSLT 1.0で定義され、それが仕様の2.0バージョンではそのように残りました。 XPath 3.0ではXPathへの道が見いだされました。

関連する問題