2012-09-27 65 views
3

我得到了這個答案,我昨天問了一個關於如何使用路徑訪問一個元素的問題 -如何提取c#中xml元素的路徑?

是否有可能做相反的事情?意思是說,如果我找到一個specificiec元素(level4在xml中)與 GetElementsByTagName方法有沒有辦法獲取這個元素的路徑並將它分配給一個變量供以後使用?直到你得到空ParentNode可以在的System.Xml找到

<?xml version="1.0" encoding="utf-8" ?> 
<level1> 
    <level2> 
     <level3>header3</level3> 
      <level4>header4</level4> 
     <level3>header31</level3> 
    </level2> 
    <level2> 
     <level3>nnn</level3> 
     <level3>nnnnn</level3> 
    </level2> 
</level1> 

回答

1

假設你已經通過

XmlNodeList nl = doc.GetElementsByTagName("level4");

然後

 XmlNode node = nl[0]; 
     String sPath = node.Name; 
     System.Xml.XmlNode np = node.ParentNode; 
     while (np != null && np.NodeType != XmlNodeType.Document) 
     { 
      sPath = String.Format("{0}/{1}", np.Name, sPath); 
      np = np.ParentNode; 
     } 
     sPath = "/" + sPath; 
     Debug.WriteLine(sPath); 

提取您的節點,你會得到 「/ 1級/級別2 /級別4」 爲SPATH

的價值

*注:這是因爲在輸入正確的XML 3級級別4(不父)

的兄弟
1

使用XmlDocument對象,然後使用parentNode屬性。使用遞歸函數來實現這一點。

0

XmlElement對象已經有一個指向父對象的指針,所以從父對象到祖父對象後面的a.s.o.直到你到達文檔,你會得到相反的層次結構。