|
||||
|
|
#1 (permalink) |
|
Neofita della community ![]()
84 Messaggi
![]() |
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> |
|
|
|
|
|
#2 (permalink) | |
|
Collega della community ![]() ![]()
830 Messaggi
![]() ![]() ![]() |
Dovresti postare il codice, altrimenti non e chiaro come gestisci caricamento e parsing del XML.
Quote:
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[]> 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);
}
|
|
|
|
|
![]() |
| Strumenti della discussione | |
| Modalità di visualizzazione | |
|
|
Tutti gli orari sono GMT +2. Attualmente sono le 09:48.










Modalità lineare

