在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; } } 

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

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

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

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

所以你需要的是改变它

 myNode.SelectSingleNode(".LastName")