Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [asp.net+xml]Scrivere un xml

    Salve a tutti ho scritto questo codice:
    codice:
    XmlDocument xmldoc=new XmlDocument();
    				xmldoc.Load(Server.MapPath("menu.xml"));
    				//Scrivo il primo elemento(padre)
    				XmlElement ruolo=xmldoc.CreateElement("ruolo");
    				XmlAttribute nome=xmldoc.CreateAttribute("nome");
    				ruolo.SetAttributeNode(nome);
    				ruolo.SetAttribute("nome",DdlUnitaOp.SelectedItem.Value);
    				
    				XmlNode primo=xmldoc.ChildNodes[1];
    				primo.AppendChild(ruolo);
    				//Scrivo l'elemento figlio 
    				Check Check=new Check();
    				if (Check.chk("CheckBox1",DgdConf))
    				{
    					XmlElement pagina=xmldoc.CreateElement("pagina");
    					XmlAttribute attStyle2=xmldoc.CreateAttribute("nome");
    					pagina.SetAttributeNode(attStyle2);
    					pagina.SetAttribute("nome",DgdConf.Items[Check.i].Cells[0].Text);
    					XmlNode secondo=primo.ChildNodes[0];
    					secondo.AppendChild(pagina);
    				}
    				//salvo il file xml
    				xmldoc.Save(Server.MapPath("menu.xml"));
    			}
    Il problema e' che i figli anche se ho creato un secondo padre vengono scritti sempre nel primo padre e non riesco a capire il perche'
    Qualcuno sa aiutarmi????

  2. #2
    Ora Il problema l'ho risolto in questo modo:
    codice:
    	{
    				
    				XmlDocument xmldoc=new XmlDocument();
    				xmldoc.Load(Server.MapPath("menu.xml"));
    				//Scrivo il primo nodo(padre)
    				XmlElement ruolo=xmldoc.CreateElement("ruolo");
    				XmlAttribute nome=xmldoc.CreateAttribute("nome");
    				ruolo.SetAttributeNode(nome);
    				ruolo.SetAttribute("nome",DdlUnitaOp.SelectedItem.Value);
    				int num=1;
    				XmlNode primo = xmldoc.ChildNodes[num];
    				primo.AppendChild(ruolo);		
    				for(int i=0;i<primo.ChildNodes.Count;i++)
    				{
    					if (primo.ChildNodes[i].Attributes["nome"].Value==DdlUnitaOp.SelectedItem.Value)
    					{
    						num=i;
    						break;
    					}
    				}
    				//Scrivo l'elemento figlio 
    				Check Check=new Check();
    				if (Check.chk("CheckBox1",DgdConf))
    				{
    					XmlElement pagina=xmldoc.CreateElement("pagina");
    					XmlAttribute attStyle2=xmldoc.CreateAttribute("nome");
    					pagina.SetAttributeNode(attStyle2);
    					pagina.SetAttribute("nome",DgdConf.Items[Check.i].Cells[0].Text);
    					XmlNode secondo=primo.ChildNodes[num];
    					secondo.AppendChild(pagina);
    				}
    				//salvo il file xml
    				xmldoc.Save(Server.MapPath("menu.xml"));
    			}
    Ma chiaramente ne e' sorto un altro!!!!!
    Dopo che ho scritto per la prima volta se vado ad inserire un nuovo figlio nel padre gia' esistente mette il figlio nel punto giusto ma ne crea un'altro padre uguale:
    <?xml version="1.0" encoding="utf-8"?>
    <config>
    <ruolo nome="Operatore">
    <pagina nome="Scocca" />
    </ruolo>
    <ruolo nome="Amministratore">
    <pagina nome="Linea" />
    <pagina nome="Unità Operativa" />
    </ruolo>
    <ruolo nome="Amministratore" />
    </config>

  3. #3
    Raga nessuno mi sa dare una mano per l'update???????
    Non so piu' come fare

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    111
    Premetto che non conosco molto C# ma spero di poterti essere d'aiuto.
    Vediamo se ho capito: vorresti eseguire l'UPDATE di nodi XML in base alle tue modifiche.
    Puoi usare il metodo SelectSingleNode per ricercare un nodo in base ad un suo attributo: se conosci un minimo di regole XPath è molto semplice.
    Se devi ad esempio cercare in base all'attributo Nome:
    codice:
    XMLNode myNodeRuolo =xmldoc.SelectSingleNode("//ruolo[@nome='" + myNome + "'");
    dove myNome è il valore del nome che ricerchi.

    se myNodeRuolo risulta Nothing vuol dire che il nodo non esiste e ne devi creare uno nuovo.
    Se invece non è Nothing il nodo è presente e a questo punto puoi usare la SelectSingleNode per in maniera analoga usando il myNodeRuolo.

    Esempio: ricavo un nodo pagina
    codice:
     
    XMLNode myNodePagina = myNodeRuolo.SelectSingleNode("pagina[@nome='" + myNomePagina + "'");
    Se invece vuoi ciclare sui diversi nodi pagina (vedo che ce n'è più di uno nel nodo Ruolo) puoi usare la SelectNodes (la SelectSingleNode non fa altro che restituire il primo nodo che soddisfa la condizione che gli passi):

    codice:
     
    XMLNodeList nodiPagine = myNodeRuolo.SelectNodes("pagina[@nome='" + myNomePagina + "'");
    Una volta ottenuto i nodi desiderati, puoi settarne gli attributi a piacimento.

    Non ho provato il codice, sto andando a memoria, ma spero di averti suggerito qualcosa di utile...

    Ciao, javalon

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.