子ノードの検索を、現在のノード内に制限したいと思います。たとえば、次のコードがあります。
XmlNodeList myNodes = xmlDoc.DocumentElement.SelectNodes("//Books");
foreach (XmlNode myNode in myNodes)
{
string lastName = "";
XmlNode lastnameNode = myNode.SelectSingleNode("//LastName");
if (lastnameNode != null)
{
lastName = lastnameNode.InnerText;
}
}
LastName要素をforeach内の現在のmyNode内から検索したいと思います。何が起こっているのかというと、見つかったLastNameは、常にmyNodesを含む最初のノードからのものです。 LastNameの正確なパスをハードコーディングしたくはありませんが、代わりにmyNode内のどこにあるかについて柔軟にできるようにします。 myNodeでSelectSingleNodeメソッドを使用すると、検索がmyNodeのxmlコンテンツ内にのみ制限され、親ノードは含まれないと思いました。
主要な//
常にドキュメントのルートから始まります。使用する .//
現在のノードから開始し、その子孫だけを検索するには:
XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName");
実際、問題はXPathに関連しています。 XPath構文 //現在のノードから、どこにいても選択に一致するドキュメント内のノードを選択することを意味します
必要なのはそれをに変更することだけです
myNode.SelectSingleNode(".LastName")