2009-11-15 2 views
7

Vorrei attraversare ogni elemento e attributo in un xml e prendere il nome di un valore senza conoscere i nomi degli elementi in anticipo. Ho persino un libro su linq to xml con C# e mi dice solo come eseguire una query per ottenere il valore degli elementi quando conosco già il nome dell'elemento.attraversare ogni elemento dell'albero xml utilizzando linq a xml

Il codice seguente mi fornisce solo le informazioni sugli elementi di livello più elevato. Devo anche raggiungere tutti gli elementi discendenti.

  XElement reportElements = null; 
      reportElements = XElement.Load(filePathName.ToString()); 


      foreach (XElement xe in reportElements.Elements()) 
      { 

       MessageBox.Show(xe.ToString()); 
      } 

risposta

17

Elements passeggiate solo livello; Descendants percorre l'intero DOM per gli elementi e puoi quindi (per elemento) controllare gli attributi:

foreach (var el in doc.Descendants()) { 
     Console.WriteLine(el.Name); 
     foreach (var attrib in el.Attributes()) { 
      Console.WriteLine("> " + attrib.Name + " = " + attrib.Value); 
     } 
    } 
+0

Questo ha funzionato alla grande! Grazie mille per l'aiuto! –

+0

JK - Hai dimenticato qualcosa? –

+0

Ehm, non so cosa intendi per aver dimenticato qualcosa. –

1

Si dovrebbe provare:

reportElements.Descendants()