Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    [C#] XML Ciclo su nodi ripetuti di un nodo..

    ciao, ho un file xml da cui devo recuperare dei nodi..
    recuperare semplicemente un certo numero di nodi non è un problema.. il problema che mi si presenta è che devo recuperare tre nodi che si ripetono un certo numero di volte..
    faccio un esempio.. immaginate questa struttura:
    codice:
    <prodotti>
      <prodotto>
    
       <tag1>aaaaa</tag1>
       <tag2>bbbbb</tag2>
       <tag3>ccccc</tag3>
    
       <tag1>ddddd</tag1>
       <tag2>eeeee</tag2>
       <tag3>fffff</tag3>
    
       <tag1>ggggg</tag1>
       <tag2>hhhhh</tag2>
       <tag3>iiiii</tag3>
    
      </prodotto>
    </prodotti>
    Al moemento riesco a recuperare solo
    codice:
       <tag1>aaaaa</tag1>
       <tag2>bbbbb</tag2>
       <tag3>ccccc</tag3>
    Ciclando un XmlNodeList.. mentre invece vorrei recuperare..
    codice:
       <tag1>aaaaa</tag1>
       <tag2>bbbbb</tag2>
       <tag3>ccccc</tag3>
    
       <tag1>ddddd</tag1>
       <tag2>eeeee</tag2>
       <tag3>fffff</tag3>
    
       <tag1>ggggg</tag1>
       <tag2>hhhhh</tag2>
       <tag3>iiiii</tag3>
    ecco come faccio:
    codice:
    string codSelected = lvmaster.SelectedItems[0].Text.ToString().Trim();
    			StreamReader sr = new StreamReader(@"export.xml");
    			XmlTextReader xr = new XmlTextReader(sr);
    			XmlDocument elencoprod = new XmlDocument();
    			elencoprod.Load(xr);
    			XmlNodeList masterview = elencoprod.SelectNodes("Prodotti/Prodotto[Codice_Euronics="+codSelected+"]");
    			
    			for (int i=0; i<masterview.Count;i++)
    			{
    				
    				XmlNode carcode = masterview.Item(i).SelectSingleNode("Codice_Caratteristica");
    				XmlNode cartype = masterview.Item(i).SelectSingleNode("Tipo_Caratteristica");
    				XmlNode cardesc = masterview.Item(i).SelectSingleNode("Descrizione_caratteristica");
    
    				ListViewItem lvdetailsObj = new ListViewItem(new string[]{carcode.InnerText.Trim(),cartype.InnerText.Trim(),cardesc.InnerText.Trim()});
    				lvdetails.Items.Add(lvdetailsObj);
    
    			}
    Qualcuno ha qualcosa da consigliarmi?
    Voglio l'alt+s anche per FF

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    se sono sempre quei 3 fissi, puoi usare SelectNodes ottenendo un nodelist, cicli poi all'interno, e lo ripeti 3 volte. Altrimenti dovresti usare la proprietà Child e lavorare su quelli x Prodotto.
    Ans.

  3. #3
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da ans
    se sono sempre quei 3 fissi, puoi usare SelectNodes ottenendo un nodelist, cicli poi all'interno, e lo ripeti 3 volte. Altrimenti dovresti usare la proprietà Child e lavorare su quelli x Prodotto.
    guarda le stò provando tutte.. il selectnodea mi andrebbebene ma non saprei come creare l'xpath
    mentre con la proprietà childnodes ci stò sbattendo ma niente..
    perchè non mi fai un esempio?
    Voglio l'alt+s anche per FF

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    selectNodes("\\*\tag1") o completo prodotti\prodotto\tag1
    Ans.

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    hem.. non mi è chiaro... io devo selezionare i tre tag (che si ripetono tantissime volte) che saranno sempre quelli..
    se seleziono quei nodi in questo modo:
    codice:
    XmlNodeList masterview = elencoprod.SelectNodes("Prodotti/Prodotto[Codice_Euronics="+codSelected+"]/tag1/tag2/tag3");
    poi come inserisco quei tre nodi nel listview?
    Voglio l'alt+s anche per FF

  6. #6
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Non mi rispondi + ?
    Voglio l'alt+s anche per FF

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    ma proprio de nada?
    Voglio l'alt+s anche per FF

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    non puoi selezionare Tag1\2\3 tutti insieme, devi fare prima Tag1 e poi i successivi. Una volta che hai un nodelist cicli da 0 a count -1 ti leggi il valore e lo assegni alla listview. Quindi in pratica ti servono 2 cicli, il primo per selezionare il tag e l'altro per ciclare all'interno del nodelist.
    Ans.

  9. #9
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da ans
    non puoi selezionare Tag1\2\3 tutti insieme, devi fare prima Tag1 e poi i successivi. Una volta che hai un nodelist cicli da 0 a count -1 ti leggi il valore e lo assegni alla listview. Quindi in pratica ti servono 2 cicli, il primo per selezionare il tag e l'altro per ciclare all'interno del nodelist.
    non c'ho capito niente hehe
    no seriamente.. quando dici:
    Una volta che hai un nodelist cicli da 0 a count -1
    dovrei in pratica istanziare 3 XmlNodeList.. o mi sbaglio?
    Voglio l'alt+s anche per FF

  10. #10
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    no aspetta ma c'è qualcosa che non mi torna.. perfavore mi fai un esempio di cosa intendi? perchè i cicli dovrebbero essere 3 e non due visto che i nodi da recuperare sono 3..
    insomma.. se scrivo:
    codice:
    			XmlNodeList carcode = elencoprod.SelectNodes("Prodotti/Prodotto[Codice_Euronics="+codSelected+"]/Codice_Caratteristica");
    			XmlNodeList cartype = elencoprod.SelectNodes("Prodotti/Prodotto[Codice_Euronics="+codSelected+"]/Tipo_Caratteristica");
    			XmlNodeList cardesc = elencoprod.SelectNodes("Prodotti/Prodotto[Codice_Euronics="+codSelected+"]/Descrizione_caratteristica");
    			
    			for(int i=0; i<carcode.Count;i++)
    			{
    			ListViewItem lvdetailsObj = new ListViewItem(new string[]{carcode.Item(i).InnerText.Trim()});
    			lvdetails.Items.Add(lvdetailsObj);
    			}
    Riesco ad inserire nel listview solo il nodelist "carcode" con tutti i tag trovati.. per inserire gli altri due devo fare altrei due cicli separati..
    sempre se ho capito cosa intendi..
    Voglio l'alt+s anche per FF

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.