web-dev-qa-db-ja.com

C#でノード内を検索するためのXmlNode.SelectSingleNode構文

子ノードの検索を、現在のノード内に制限したいと思います。たとえば、次のコードがあります。

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コンテンツ内にのみ制限され、親ノードは含まれないと思いました。

12
user31673

主要な//常にドキュメントのルートから始まります。使用する .//現在のノードから開始し、その子孫だけを検索するには:

XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName");
26

実際、問題はXPathに関連しています。 XPath構文 //現在のノードから、どこにいても選択に一致するドキュメント内のノードを選択することを意味します

必要なのはそれをに変更することだけです

myNode.SelectSingleNode(".LastName")
1
ibo.ezhe