document xml e ciclo sui nodi
-
venerdì 6 aprile 2012 08:10
ciao a tutti
sto guardando un po come lavorare con i file xml e qualcosa non mi torna: leggo un file utilizzando un xmldocument, quindi il contenuto è inserito in memoria, ed infatti se richiamo un nodo specificando l'indice riesco a leggere l'innertext , che è cio che mi interessa realmente. Quello che non riesco a fare è leggere l'innertext utilizzando il nome dell'elemento e ciò mi obbliga a fare un ciclo su tutti i sottonodi per controllare se il nome dell'elemento è quello che sto cercando. Visto che ho circa 700 nodi figlio il ciclo viene eseguito 700 x nodi nel file, il che mi sembra uno spreco di "energie".Facendo un esempio con un po di codice:
doc.Load(NomeFile); //metto i nodi in un oggetto nodelist nodeList = doc.SelectNodes("//giorno/impianto"); //ciclo sul nodelist e leggo tutti nodi foreach (XmlNode nd in nodeList){ // se è il nodo con il codice impianto giusto... if (nd.Attributes[0].Value == cod_impianto) { //... ed ha sottonodi... if (nd.HasChildNodes) // qi sono costretto a ciclare su tutti i nodi figlio per //trovare il nodechild.name giusto foreach (XmlNode nodechild in nd.ChildNodes) { if (nodechild.Name == ("versione_software") string versione = nodechild["versione_software"].InnerText; } } }
Quindi vengo alla domanda:c'è un modo per leggere la proprietà innertext richiamando il nodo figlio con il nome dell'elemento?
grazie per le risposte
nervo
- Modificato nervo venerdì 6 aprile 2012 08:11
Tutte le risposte
-
venerdì 6 aprile 2012 08:42Postatore
In generale, hai due modi:
- Continuare ad utilizzare XmlDocument e definire un'opportuna query XPath per recuperare esattamente i nodi che ti servono;
- Passare a XDocument, http://msdn.microsoft.com/it-it/library/system.xml.linq.xdocument.aspx, con cui puoi effettuare selezioni nel file XML utilizzando la sintassi LINQ.
Personalmente, io seguirei la seconda strada.
Ad ogni modo, senza conoscere la struttura del file XML, è difficile darti indicazioni più precise su come recuperare l'informazione che cerchi. Perché, ovviamente, tutto dipende da come è organizzato.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva- Contrassegnato come risposta nervo venerdì 6 aprile 2012 16:44
-
venerdì 6 aprile 2012 08:48
Ti consiglio di passare alla classe XDocument usando LINQ To XML, scritto tutto in .NET, XmlDocument al contrario è un wrapper COM.
Il vero motivo è però che semplica il modo in cui interrogare l'albero e le performance tendenzialmente sono migliori.
Per estrarre tutti i nodi dato il nome del tag:
http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.descendants.aspx o
http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.elements.aspx.
Trovi molti esempi.Matteo Migliore
Bloghttp://blogs.ugidotnet.org/matteomigliore
Twitterhttp://twitter.com/matteomigliore
CodePlex- Contrassegnato come risposta nervo venerdì 6 aprile 2012 16:44
-
venerdì 6 aprile 2012 16:44
vado con xdocument e linq, mi pare che il passo sia diverso.
grazie ad entrambi.
nervo

