Estrai in lista nodi che soddisfano una condizione su schema xml

lunedì 25 ottobre 2010 - 11.19

maui.80 Profilo | Junior Member

Ciao a tutti, sto cercando di gestire un file xml che mi fa da database delle lingue così strutturato:

- <PREVALLE> <AS400>CD00 01960002960097</AS400> <ITA>Piastra acciaio</ITA> <ENG>Steel plate</ENG> <FRA>Plaque acier</FRA> <TED>Stahlplatte</TED> <RUS>Стальная плита</RUS> <SPA>Placa acero</SPA> <ACCIAIO>1.1730</ACCIAIO> <CODICE>D</CODICE> <DIMENSIONI>196x296x97</DIMENSIONI> <PESO>6.15</PESO> </PREVALLE> - <PREVALLE> <AS400>CD00 01960003460057</AS400> <ITA>Piastra acciaio</ITA> <ENG>Steel plate</ENG> <FRA>Plaque acier</FRA> <TED>Stahlplatte</TED> <RUS>Стальная плита</RUS> <SPA>Placa acero</SPA> <ACCIAIO>1.1730</ACCIAIO> <CODICE>D</CODICE> <DIMENSIONI>196x346x57</DIMENSIONI> <PESO>4.23</PESO> </PREVALLE>

dovrei realizzare una funzione che mi ritorna il valore di PESO (per esempio) a seconda del codice AS400 immesso.
Premetto che con un for ed un if all'interno riesco già a farlo, il problema è la velocità d'esecuzione della funzione.
Dovrei riuscire a far caricare i/il nodo desiderato subito nella mia lista nodi senza far scorrere tutto il file xml.
Per far questo avrei bisogno di una vostra indicazione, io ho già realizzato il primo pezzo di codice utilizzando system.xml

Dim fun As New MyFun Dim mycountries As New DataSet Dim pathpublic As String = ParametriGlobali.STRPROGETTO & "public\" Dim rit As New ArrayList() Dim as400 As String Dim trovato As Boolean = False as400 = RitornaDesAS400PezzoDettaglio(idpezzo) Dim path As String = pathpublic & "PREVALLE.xml" 'istanzio il documento Dim Doc As New XmlDocument() 'lo carico in memoria Doc.Load(path) 'recupero il nodo root Dim element As XmlElement = Doc.DocumentElement 'qui commentato il codice per far passare ogni nodo ' Dim node As XmlNode 'For Each node In element.ChildNodes 'MessageBox.Show(node.InnerText) 'Next 'questa prova non funziona Dim nodelist As XmlNodeList nodelist = Doc.SelectNodes("//PREVALLE[AS400=CD00 01960003460077]")

avete qualche indicazione da darmi?

grazie mille per l'aiuto

ciao
MAURO

freeteo Profilo | Guru

Ciao,
è passato un po' di tempo da questa tua domanda, probabilmente hai già risolto, ad ogni modo io ti consiglio se lavori con XML di pensare ad usare LinqToXml, ossia il motore Linq di .net per andare a fare query su xml, la cosa è più semplice ed integrata nel codice,quindi ti può aiutare molto.

Ti posto un codice d'esempio nel tuo caso:
XDocument doc = XDocument.Parse(xml); var q = from x in doc.Descendants("PREVALLE") select new { Peso = decimal.Parse(x.Element("PESO").Value, NumberStyles.AllowDecimalPoint, new CultureInfo("en-US").NumberFormat), CodiceAS = x.Element("AS400").Value, };
a questo punto puoi iterare sugli elementi (oppure alla query di prima applicare qualche "where" etc...)
foreach(var item in q) { item.Peso ... item.CodiceAS ... }

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5