我想在给定的XmlNode内部找到所有的<Field />
节点(可以任意嵌套)。用于选择所有节点的XPath表达式
如果做这样的事情:
foreach(XmlNode n in node.SelectNodes('//Field'))...
这将返回node
下整个文档中的所有节点,不是所有的节点。
XPath应该如何工作?我查看了一些文档,看起来应该将这个查询范围限定在它所调用的任何节点上。
是否有任何其他技术来选择具有特定节点下的给定名称的所有节点?
我想在给定的XmlNode内部找到所有的<Field />
节点(可以任意嵌套)。用于选择所有节点的XPath表达式
如果做这样的事情:
foreach(XmlNode n in node.SelectNodes('//Field'))...
这将返回node
下整个文档中的所有节点,不是所有的节点。
XPath应该如何工作?我查看了一些文档,看起来应该将这个查询范围限定在它所调用的任何节点上。
是否有任何其他技术来选择具有特定节点下的给定名称的所有节点?
如果您使用'//Field'
它绝对从文档的根目录。要搜索相对于当前节点,只需使用'.//Field'
。
尝试使用SelecteSingleNode()
您可以使用简单的LINQ查询是这样的:
var techLeads = (from value in element.Descendants ("Manager")
where value.Attribute ("Name").Value == "Mgr1"
select value).Descendants("TechLead");
示例XML:
<Employees> <Manager Name="Mgr1"> <TechLead Name="TL1" /> <TechLead Name="TL2" /> </Manager> </Employees>
使用./Field
。
.//
意味着后代,其中包括儿童的孩子(等等)。./
指直接的孩子。如果XPath以/
开头,它将相对于文档的根;使其相对于您自己的节点以./
开始。
删除//
,否则它会在所有文档中无关地搜索根节点。
node.SelectNodes("Field")
您是否考虑过使用LINQ to XML?使用XPath比使用XPath更容易。 – Zebi