2017-03-06 38 views
0

我正在試圖獲取xml結構的深層次的節點。在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> 

我想用「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 
} 

是否有任何安心使用方法也是這樣嗎?

回答

1

您可以使用System.Xml.Linq

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

您可以使用SelectNodes()SelectSingleNode(),它接受XPath expression作爲參數。 XPath的支持表達查詢找到任何名稱的元素,在任何地方的XML文檔,其中name屬性值爲「5名」:

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