0

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

我想获取以“名称 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
}

有没有这样易于使用的方法?

4

2 回答 2

2

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

var searchParam = "name 5";
var xpath = string.Format("//*[@name='{0}']", searchParam);
var wantedNode = xmlDoc.SelectSingleNode(xpath);
于 2017-03-06T07:04:03.940 回答
1

您可以使用System.Xml.Linq

var item = xmlDoc.Descendants()
           .FirstOrDefault(node => (string)node.Attribute("name") == "name 5")
于 2017-03-06T07:08:46.547 回答