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

时间:2017-03-06 06:49:08

标签: c# xml wpf nodes child-nodes

我正在尝试为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
}

这样的方法有用吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以使用System.Xml.Linq

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