2009-10-20 13 views
6

C# içindeki özyinelemeli işlevleri kullanarak XML belgesini nasıl geçirebilirim (sırayla tüm düğümleri oku)?Özyinelemeli fonksiyonunu kullanarak XML'yi çaprazlayın

İstediğim xml bütün düğümleri okumak (özelliklerini sahip olduğu) ve (Düğüm localName olmadan ama) xml ile aynı yapıda yazdırabilirsiniz

Teşekkür

+1

Hala ne yapmak istediğinizi anlamıyorum. Belki çok basit ve kısa bir örnek gösterebilir misin? Orijinal XML'iniz neye benziyor, neyi geri istiyorsun? “Yazdır” ile ne demek istiyorsun - konsola yazabilir misin? Bir dosyaya yazılsın mı? Ve XML'den XML'e dönüştürmek için XSLT'ye bakmamalısın? Mükemmel bir uyum gibi görünüyor. –

+0

Ben XSLT en iyi 1..but olduğunu kabul ediyorum Burada basit bir özyinelemeyi algo..thnx bekleniyor – Kaja

cevap

3
IEnumerable<atype> yourfunction(XElement element) 
{ 
    foreach(var node in element.Nodes) 
    { 
     yield return yourfunction(node); 
    } 

//do some stuff 
} 
+0

Ben yeterli açıklama vermemek benim sorum olduğunu düşünüyorum.Ne istiyorum, xml (tüm özelliklere sahip olan tüm düğümleri okumak istiyorum)) ve xml (Node Localname olmaksızın) – Kaja

+0

ile aynı yapıda yazdırın, geri dönüş, döngüden döngüyü engeller. – bmm6o

+0

@ bmm6o: "getiri geri dönüşü" talimatına bakın: http://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx – Seb

22
using System.Xml; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var doc = new XmlDocument(); 
      // Load xml document. 
      TraverseNodes(doc.ChildNodes); 
     } 

     private static void TraverseNodes(XmlNodeList nodes) 
     { 
      foreach(XmlNode node in nodes) 
      { 
       // Do something with the node. 
       TraverseNodes(node.ChildNodes); 
      } 
     } 
    } 
} 
+0

thanx..bu prob problemini çözdü – Kaja

+19

Sorunu çözdüyseniz, doğru cevap olarak işaretleyebilir misiniz? Teşekkürler. –

1

etmektir Here's a good example

static void Main(string[] args) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.Load("../../Employees.xml"); 
    XmlNode root = doc.SelectSingleNode("*"); 
    ReadXML(root); 
} 

private static void ReadXML(XmlNode root) 
{ 
    if (root is XmlElement) 
    { 
     DoWork(root); 

     if (root.HasChildNodes) 
      ReadXML(root.FirstChild); 
     if (root.NextSibling != null) 
      ReadXML(root.NextSibling); 
    } 
    else if (root is XmlText) 
    {} 
    else if (root is XmlComment) 
    {} 
} 

private static void DoWork(XmlNode node) 
{ 
    if (node.Attributes["Code"] != null) 
     if(node.Name == "project" && node.Attributes["Code"].Value == "Orlando") 
      Console.WriteLine(node.ParentNode.ParentNode.Attributes["Name"].Value); 
}