在 C# 中以递归方式查找更深层次的 xml 节点

Find xml node in deeper levels recursively in c#

我正在尝试获取 xml 结构的深层节点。

我的xml结构:

<Level1 name="data_reply"> 
  <Level2 name="name1"> 
    <level3 name="name2" />
    <Level3 name="name3 > 
        <Level4 name="name4"/>
        <Level4 name="name5" someAttributes="blah blah"/>
    </Level3> 
  <Level2 name="name6"/>
  <Level2 name="name7"/>
</Level1> 

我想获取以 "name 5" 命名的节点及其属性。问题是我想得到这个节点,即使它更深或者节点级别不同。名称属性可以假定为唯一的我的意思是我想要的是这样的:

var xmlDoc = new XmlDocument();
xmlDoc.Load("FileFullPath");
var wantedNode = xmlDoc.DocumentElement.GetNodeWithName("name5") // Which can be recursive or iterative

我的方法签名可能是这样的:

public XmlNode GetNodeWithName(string nodeNameAttributeValue){
  ... Method content
  return myNode
}

有这样的好用方法吗?

您可以使用 SelectNodes() or SelectSingleNode() which accept XPath expression 作为参数。 XPath 支持表达查询以在 XML 文档中的任何位置查找任何名称的元素,其中 name 属性值等于 "name 5" :

var searchParam = "name 5";
var xpath = string.Format("//*[@name='{0}']", searchParam);
var wantedNode = xmlDoc.SelectSingleNode(xpath);

您可以使用 System.Xml.Linq:

var item = xmlDoc.Descendants()
           .FirstOrDefault(node => (string)node.Attribute("name") == "name 5")