在C#中的节点内搜索的XmlNode.SelectSingleNode语法

时间:2011-08-05 00:04:25

标签: c# xml xmldocument

我想限制我对子节点的搜索,使其位于我所在的当前节点内。例如,我有以下代码:

XmlNodeList myNodes = xmlDoc.DocumentElement.SelectNodes("//Books");
    foreach (XmlNode myNode in myNodes)
    {
         string lastName = "";
         XmlNode lastnameNode = myNode.SelectSingleNode("//LastName");
         if (lastnameNode != null)
         {
              lastName = lastnameNode.InnerText;
         }
    }

我希望从foreach内部的当前myNode中搜索LastName元素。发生的事情是找到的LastName始终来自第一个带有myNodes的节点。我不想硬编码LastName的确切路径,而是允许它灵活地找到myNode的内部。我原以为在myNode上使用SelectSingleNode方法会限制搜索只能在myNode的xml内容中,而不包括父节点。

2 个答案:

答案 0 :(得分:26)

前导//始终从文档的根开始;使用.//从当前节点开始并仅搜索其后代:

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

答案 1 :(得分:1)

实际上,问题与XPath有关。 XPath syntax //表示从当前节点中选择与选择匹配的文档中的节点,无论它们位于何处

所以你需要的是把它改成

myNode.SelectSingleNode(".LastName")