2011-02-14 8 views
22

Sto tentando di eseguire un'iterazione tra i nodi del documento xml per ottenere il valore per <username>Ed</username> in ciascun nodo. Sto usando Linq per ordinare prima l'XDocument, quindi sto provando a scorrere i nodi. Non riesco a trovare il ciclo foreach corretto per raggiungere questo obiettivo. Qualsiasi aiuto è apprezzato.Come eseguire un'iterazione attraverso i nodi di XDocument

var doc = XDocument.Load("files\\config.xml"); 
var newDoc = new XDocument(new XElement("Config", 
      from p in doc.Element("Config").Elements("Profile") 
      orderby int.Parse(p.Element("order").Value) 
      select p)); 


foreach (XElement xe in newDoc.Nodes()) 
{ 
    MessageBox.Show(xe.Element("username").Value); 
} 

// XML document 
<Config> 
<Profile> 
    <id>Scope</id> 
    <username>Scope 1</username> 
    <password>...</password> 
    <cdkey>0000</cdkey> 
    <expkey></expkey> 
    <cdkeyowner>Scope</cdkeyowner> 
    <client>W2BN</client> 
    <server>[IP]</server> 
    <homechannel>Lobby</homechannel> 
    <load>1</load> 
    <order>2</order> 
</Profile> 
<Profile> 
    <id>Scope 2</id> 
    <username>Scope 2</username> 
    <password>...</password> 
    <cdkey>0000</cdkey> 
    <expkey></expkey> 
    <cdkeyowner>Scope</cdkeyowner> 
    <client>W2BN</client> 
    <server>[IP]</server> 
    <homechannel>Lobby</homechannel> 
    <load>1</load> 
    <order>1</order> 
</Profile> 
</Config> 
+0

potete inserire il vostro (abbreviata) dello schema, o presentare una (abbreviata) esempio? –

+0

sicuro, 'Codice delle Ed Ed 2 ' Codice delle –

+0

Si dovrebbe essere in grado di mettere un punto di interruzione qui, l'esecuzione in modalità di debug, e poi ispezionare il 'newdoc 'Oggetto per determinare le proprietà XML corrette da interrogare. –

risposta

39

Prova questo. Non sono sicuro del motivo per cui hai bisogno del secondo documento.

foreach (XElement xe in doc.Descendants("Profile")) 
{ 
    MessageBox.Show(xe.Element("username").Value); 
} 
+0

il secondo documento è di ordinare il primo con' codice' nel mio schema Non l'ho incluso. Funziona, ma c'è un modo per fare il ciclo di ogni nodo e ottenere il valore per tutti gli elementi nel nodo (il mio schema è abbreviato, ogni nodo contiene circa 10 elementi a cui devo accedere) –

+0

pubblica lo schema completo, o tanto è rilevante, altrimenti è difficile indovinare cosa stai provando Compilare lo schema completo –

+0

. Fondamentalmente ho bisogno di scorrere ogni nodo 'code' e ottenere il valore per ogni elemento al suo interno –

4

È più facile utilizzare un XPathDocument e un'espressione XPath.

0

Se si sta cercando un nodo interno, ad esempio ricorsivo, è possibile verificare che l'elemento abbia un elemento. Per esempio ASSUM voi leggendo il tuo XML dal database

string xmlRoot = "select XmlItem from db"; 
XDocument doc = XDocument.Parse(xmlRoot); 
List<XElement> xElementList = doc.Descendants().Tolist(); 
foreach(XElement element in xElementList) 
{ 
    // read the element and do with your node 
    if(element.HasElements) 
    { 
     // here you can reach nested node 
    } 

} 
Problemi correlati