MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > Visual C#



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 10-01-2010, 15:38   #1 (permalink)
Neofita della community

 
84 Messaggi

giangi_luca ancora senza reputazione ( 0 )
problema nella lettura i tag multipli

ciao a tutti e auguri di buon anno.
ho questo problema.
so leggeno un file xml come input.
riesco a leggere tranquillamente tutti i campi che si presetano solo una volta, però ho il segute problema:
in un certo punto del file ho un tag DETT che al suo interno può avere N blocchi di tag <line>.
vorrei:
memorizzar tutti i valori degli attributi del tag line in una lista
(come una tabella con N righe)
pero nn sto riscendo a capire come fare.
mi date una mano?
<DETT>
<line>
<FILE_N>20091218_23340.pdf</FILE_N>
<FILE_M>20091218_23341.pdf</FILE_M>
</line>
<line>
<FILE_N>20091218_23342.pdf</FILE_N>
<FILE_M>20091218_23343.pdf</FILE_M>
</line>
</DETT>

giangi_luca non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 17:50   #2 (permalink)
Collega della community

 L'avatar di bumm

 
830 Messaggi

bumm e' una persona affidabile ( + 250 )bumm e' una persona affidabile ( + 250 )bumm e' una persona affidabile ( + 250 )
Dovresti postare il codice, altrimenti non e chiaro come gestisci caricamento e parsing del XML.
Quote:
memorizzar tutti i valori degli attributi del tag line in una lista
nel esempio XML da te postato non vedo nessun attributo ma solamente i valori degli elementi(nodi)

Ci vorrebbe un doppio ciclo per gestire la struttura del genere. Ma comunque dipende molto da come deve essere il risultato finale.

Presumo che la "lista" finale e un oggetto del genere:
codice:
List<string[]>
a questo punto si potrebbe popolare i risultati usando LinqToXml

codice:
using System.Xml.Linq;
codice:
//caricamento del documento
XDocument doc = XDocument.Load(path);

//prendiamo l'elemento root del xml(controlla il nome)
XElement root = doc.Element(XName.Get("root"));

//Cerchiamo l'elemento "DETT"
XElement dett = root.Element(XName.Get("DETT"));

//Creiamo il contenitore per i risultati:
 List<string[]> Lines = new List<string[]>();

//Prima query sui elementi "lines"
 var linesQ = from s in dett.Elements().AsEnumerable()
                   where  s.Name == XName.Get("line")
                   select s;
         foreach (var item in linesQ)
         {
                //seconda query su ogni elemento in  ogni "lines" 
                var lineQ = from s in item.Elements().AsEnumerable()
                                select new
                                 {
                                     s.Value
                                 };
                        //creiamo il contenitore per tutti i nomi di file di una determinata riga 
                        //e lo popoliamo  con i risultati della query
                        string[] rowItems = new string[lineQ.Count()];
                        for (int i = 0; i < lineQ.Count(); i++)
                        {
                            rowItems[i] = lineQ.ElementAt(i).Value; 
                        }
                         //aggiungiamo la riga (string[]) con i nomi dei file al contenitore finale
                        Lines.Add(rowItems);
         }
__________________
Se la risposta ti e stata utile


"HeloWorld.exe" 17 errors, 31 warnings.
bumm non è in linea   Bookmark and Share Rispondi quotando
Vecchio 11-01-2010, 22:01   #3 (permalink)
Neofita della community

 
84 Messaggi

giangi_luca ancora senza reputazione ( 0 )
ciao grazie mille
credo sia quello che mi serve, ora faccio un pò di test sulla
mia applicazione.

grazie ancora
giangi_luca non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:48.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.