次の XML を例にとります。
<root>
<lines>
<line>
<number>1</number>
</line>
<line>
<number>2</number>
</line>
</lines>
</root>
XmlNodeList nodeList = doc.SelectNodes("//lines/line");
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("//number");
}
上記のコードは、両方の反復で index = 1 になります。
foreach(XmlNode node in nodeList)
{
int index = node.SelectSingleNode("number");
}
上記のコードは、それぞれ 1,2 になります。// が xpath の最初の出現を見つけることは知っていますが、最初の出現はノード自体に関連する必要があるように感じます。子ノードからノードを選択する場合でも、動作はルートから最初のオカレンスを見つけるように見えます。これはマイクロソフトがこれを機能させることを意図した方法ですか、それともバグですか。