次のコード フラグメントは、InvalidCastExceptionを生成します。
static int XPathCount()
{
var doc = new XmlDocument();
doc.LoadXml(
@"<root>
<item>value1</item>
<item>value2</item>
<item>value3</item>
</root>");
var navigator = doc.CreateNavigator();
var expression = navigator.Compile("count(//item)");
var count = navigator.Evaluate(expression);
return (int) count;
}
この動作に驚いたので、count()関数をXPATH 仕様に調べます。
count 関数は、引数 node-set 内のノードの数を返します。
ここまでは順調ですが、数字とは何ですか? 答えは同じ仕様にあります。
数値 (浮動小数点数)
どうやらこれはXPATH 2.0で xs:integer を返すように修正されたようですが、私はまだこれに興味があります。
W3C がcount()関数に 10 進数を使用することにした理由を知っている人はいますか?