Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di daspide
    Registrato dal
    Nov 2001
    Messaggi
    132

    [C#] Scorrere e filtrare i nodi

    Ciao a tutti,
    non sono un' espertone di c# e di XML, mi sono cimentato
    nel creare un software che ha come base dati un file XML.
    Il problema è che non riesco, dato un valore, a fare il next ed il previous sui nodi.
    Ho fatto un po di prove è ho ottenuto un discreto risultato,
    usando NextSibling e PreviousSibling riesco a iterare.
    Ma se il nodo contiene un elemento con valore ad "A" non dovrebbe visualizzarlo invece....

    posto il codice che forse è meglio...

    in rosso il problema
    codice:
    .......
    
    XmlDocument rootnode = new XmlDocument();
    rootnode.Load(xdocpath);
    XmlNode nodeset = rootnode.DocumentElement;
    XmlNode nnext;
    XmlNodeList nnnext;
    XmlNode h;
    XmlNode o;
    string k;
    nnnext = nodeset.SelectNodes("/nodorut/figli[codicefn='" + coderef + "' and stators='A']");
    foreach (XmlNode n in nnnext)
    {
        if (tpact == "S")
        {
            h = n.NextSiblingPreviousSibling;
            Console.WriteLine(h.InnerText);
        }
        else if (tpact == "P")
        {
            h = n.PreviousSibling;
            k = h.SelectSingleNode("/nodorut/figli[stators='A']").InnerText;
            if (k == "A")
            { 
                Console.WriteLine(h.InnerText);
            }
        }
        else
        {
            h = n;
            Console.WriteLine(h.InnerText);
        }
    }
    FILE XML:
    codice:
    <!DOCTYPE nodorut[                      
    <!ELEMENT nodorut (figli+)>             
    <!ELEMENT codicefn (#PCDATA)>           
    <!ELEMENT nome (#PCDATA)>               
    <!ELEMENT eta (#PCDATA)>                
    <!ELEMENT stators (#PCDATA)>            
    <!ATTLIST figli codicefn ID #REQUIRED>  
    <!ATTLIST figli stators CDATA #REQUIRED>
    ]>                                      
    <nodorut>                               
    	<figli>                               
    		<codicefn>234a</codicefn>           
    		<nome>pippo</nome>                  
    		<eta>10</eta>                       
    		<stators>d</stators>                
    	   </figli>                           
    	<figli>                               
    		<codicefn>235a</codicefn>           
    		<nome>pluto</nome>                  
    		<eta>15</eta>                       
    		<stators>a</stators>                
    	</figli>                              
    	<figli>                               
    		<codicefn>236a</codicefn>           
    		<nome>nello</nome>                  
    		<eta>13</eta>                       
    		<stators>a</stators>                
    	</figli>                              
    </nodorut>
    dove sbaglio?
    Grazie a tutti
    ...cosa puoi fare con un rasoio,un limone ed un gatto?!?......
    d%asp%ide

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    apparte che "tpact" non si sa cosa sia..

    con un

    codice:
    XmlDocument rootnode = new XmlDocument();
    rootnode.Load(xdocpath);
    XmlNode nodeset = rootnode.DocumentElement;
    XmlNode nnext;
    XmlNodeList nnnext;
    XmlNode h;
    XmlNode o;
    string k;
    nnnext = nodeset.SelectNodes("/nodorut/figli[codicefn='" + coderef + "' and stators='A']");
    foreach (XmlNode n in nnnext)
    {
        if (tpact == "S")
        {
            h = n.NextSiblingPreviousSibling;
            Console.WriteLine(h.InnerText);
        }
        else if (tpact == "P")
        {
            h = n.PreviousSibling;
            k = h.ChildNodes[3].InnerText;  //basta questo per avere il nodo
            if (k == "A")
            { 
                Console.WriteLine(h.InnerText);
            }
        }
        else
        {
            h = n;
            Console.WriteLine(h.InnerText);
        }
    }

  3. #3
    Utente di HTML.it L'avatar di daspide
    Registrato dal
    Nov 2001
    Messaggi
    132
    Anzitutto grazie per l'interesse e scusate per l'errata posizione del post.

    tpact è un variabile che gli passo per ottenere l'azione
    quando metti l'indice al childnode è perchè hai sai che nel file è in quella posizione
    codice:
    h = n.PreviousSibling;
            k = h.ChildNodes[3].InnerText;  //basta questo per avere il nodo
            if (k == "A")
            { 
                Console.WriteLine(h.InnerText);
            }
    supponiamo che non si sappia e che bisogna agire con il nome come devo fare?
    dico una cosa impossibile?
    oppure c'è il modo di sapere qual'è la posizione dell'elemento?
    ...cosa puoi fare con un rasoio,un limone ed un gatto?!?......
    d%asp%ide

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    a quel punto fai un ciclo per tutti i figli del nodo in questione e controlli qual'è quello giusto

    cmq nel tuo esempio credo che l'errore sia nell'xpath passato alla SelectSingleNode

  5. #5
    Utente di HTML.it L'avatar di daspide
    Registrato dal
    Nov 2001
    Messaggi
    132
    ipotizzando di utilizzare il valore numerico come indichi
    codice:
    ........
    
     k = h.ChildNodes[3].InnerText;  //basta questo per avere il nodo
    
    
    ........
    non capisco come mai il NextSibiling e il PreviousSibili se ne freghino che il valore sia ad "A" e me lo restituiscano lo stesso
    nonostante ci sia

    codice:
    ......
    nnnext = nodeset.SelectNodes("/nodorut/figli[codicefn='" + coderef + "' and stators='A']");
    ........


    come si fa a simulare un next prev come i record su un db!!!!

    ...cosa puoi fare con un rasoio,un limone ed un gatto?!?......
    d%asp%ide

  6. #6
    Utente di HTML.it L'avatar di daspide
    Registrato dal
    Nov 2001
    Messaggi
    132
    un consiglio?
    ...cosa puoi fare con un rasoio,un limone ed un gatto?!?......
    d%asp%ide

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.