2012-06-28 56 views
0

我正在尋找一種很好的方法,通過XML文檔遞歸而不指定XPATH或XQUERY表達式。剛開始在根節點。我需要堅持節點的元素和文本。通過XML文檔緩存

類似的東西來:

private void RecurseXml(XmlNode root) 
    { 
     if (root is XmlElement) 
     { 
      Console.WriteLine(root.Name); 
      if (root.HasChildNodes) 
       RecurseXmlDocument(root.FirstChild); 
      if (root.NextSibling != null) 
       RecurseXmlDocument(root.NextSibling); 
     } 
     else if (root is XmlText) 
     { 
      string text = ((XmlText)root).Value; 
      Console.WriteLine(text); 
     } 

凡遞歸處理決定自己的子女或不與使用XPath。我發佈的代碼的問題是將元素的文本捆綁在一起。所以我可以在另一個過程中匹配元素名稱,並將其設置爲等於文本的值。所以我可以使用約定來進行映射。

回答

1

任何原因你不只是想XDocument.Descendants()?我不記得這是否是廣度優先或深度優先,但它會找到遞歸文檔中的所有元素......你樣本代碼使用XmlElementXmlText,但你標籤

注說xdocument。我首先看到了標籤,這導致我認爲你正在使用LINQ to XML。如果你是而不是使用LINQ to XML,但可以這樣做,我建議你這樣做。這不是完全清楚你真正想做的事,但如果你只是需要打印的所有元素的文本,那真的很容易:

foreach (var element in doc.Descendants()) 
{ 
    Console.WriteLine(element.Value); 
} 

當然會寫「空」元素的空行 - 如果你想避免這種情況,你可以在寫入控制檯前進行檢查。

+0

完美,謝謝。我忘記了後代,大部分的例子都在使用xpath和xquery。 – PMOrion