135 messaggi dal 01 novembre 2012
Buongiorno,

ho diversi file salvati in una cartella in Xml e gradirei sapere il procedimento per modificare una voce per es. "Prova5" in "Cane". è possibile?

<contatto>
<textbox1>Prova1</textbox1>
<textbox2>Prova2</textbox2>
<textbox3>Prova3</textbox3>
<textbox4></textbox4>
<textbox5>Prova5</textbox5>
<textbox6>Prova6</textbox6>
<textbox7></textbox7>
<textbox8></textbox8>
<textbox9>Prova9</textbox9>
<textbox10>Prova10</textbox10>
</contatto>

Anticipatamente ringrazio e fiducioso, saluto.
Domenico.
311 messaggi dal 08 gennaio 2011
Ciao,
secondo me potresti fare così :

Fai riferimento allo spazio dei nomi System.Xml.Serialization ;

Crei una nuova classe avente nome identico a quello dell'elemento radice contenuto nel file XML, nel tuo caso "contatto" (ricorda che c# è case sensitive);

In questa nuova classe aggiungi tante proprietà di tipo stringa quanti sono i figli dell'elemento <contatto>;

crei un costruttore che accetti come parametro il nome del file contenente l'xml;

crei un metodo salva.

Di seguito un esempio :

La classe contatto

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Prove
{
    public class Contatto
    {
        //campi privati
        private XmlSerializer serializer;
        private string NomeFileXml;

        //proprietà
        public string textbox1 { get; set; }
        public string textbox2 { get; set; }
        public string textbox3 { get; set; }
        public string textbox4 { get; set; }
        public string textbox5 { get; set; }
        public string textbox6 { get; set; }
        public string textbox7 { get; set; }
        public string textbox8 { get; set; }
        public string textbox9 { get; set; }
        public string textbox10 { get; set; }

        //costruttore vuoto
        public Contatto()
        {
        }

        //costruttore con parametro
        public Contatto(string nf)
        {
            NomeFileXml = nf;
            serializer = new XmlSerializer(typeof(Contatto));
            using (StreamReader sr = new StreamReader(NomeFileXml))
            {
                Contatto cx = serializer.Deserialize(sr) as Contatto;
                this.textbox1 = cx.textbox1;
                this.textbox2 = cx.textbox2;
                this.textbox3 = cx.textbox3;
                this.textbox4 = cx.textbox4;
                this.textbox5 = cx.textbox5;
                this.textbox6 = cx.textbox6;
                this.textbox7 = cx.textbox7;
                this.textbox8 = cx.textbox8;
                this.textbox9 = cx.textbox9;
                this.textbox10 = cx.textbox10;
            }
        }

        //metodo salva
        public void Salva()
        {
            using (StreamWriter sw = new StreamWriter(NomeFileXml))
            {
                serializer.Serialize(sw, this);
            }
        }
    }
}


Il codice di un Form che utilizza la classe Contatto

 public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            /* 
             anche se il file è di tipo txt l'importante è 
             che al suo interno contenga codice xml valido
            */

            Contatto c1 = new Contatto("C2.txt");
            c1.textbox5 = "Cane";
            c1.Salva();
        }
    }


Se i tuoi file xml rispecchiano tutti lo stesso schema, ma anche se hanno un numero di elementi figlio minore delle proprietà della classe corrispondente Contatto, purchè abbiano nomi identici, possono essere gestiti col codice di esempio.

Se hai un file che contiene per esempio solo textbox3, textbox5, textbox6, come figli dell'elemento Contatto, lo puoi gestire col codice di esempio.

Se invece hai un file che contiene per esempio un elemento textbox11 non lo potrai modificare perché la classe Contatto non ha una proprietà textbox11.

All'inizio C2.txt conteneva questo testo :

<contatto>
<textbox1>Prova1</textbox1>
<textbox2>Prova2</textbox2>
<textbox3>Prova3</textbox3>
<textbox4></textbox4>
<textbox5>Prova5</textbox5>
<textbox6>Prova6</textbox6>
<textbox7></textbox7>
<textbox8></textbox8>
<textbox9>Prova9</textbox9>
<textbox10>Prova10</textbox10>
</contatto>


dopo la chiamata al metodo Salva se apri il file lo vedrai contenere questo testo :

<?xml version="1.0" encoding="utf-8"?>
<Contatto xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <textbox1>Prova1</textbox1>
  <textbox2>Prova2</textbox2>
  <textbox3>Prova3</textbox3>
  <textbox4 />
  <textbox5>Cane</textbox5>
  <textbox6>Prova6</textbox6>
  <textbox7 />
  <textbox8 />
  <textbox9>Prova9</textbox9>
  <textbox10>Prova10</textbox10>
</Contatto>




Ciao.
Modificato da Mario Formosa il 01 novembre 2022 14:37 -
3 messaggi dal 25 febbraio 2023
Yes, it is possible to change the value of an element in an XML file using programming. Here's a general outline of how you can achieve this using C# and the XmlDocument class:

Load the XML file into an XmlDocument object:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("path/to/your/xml/file.xml");
Locate the element that you want to change. In this case, you want to change the value of the fifth textbox element. You can use the SelectSingleNode method to locate the element based on its name:

XmlElement textbox5 = xmlDoc.SelectSingleNode("//textbox5") as XmlElement;
Set the new value for the element:

textbox5.InnerText = "Dog";
Save the changes back to the XML file:

xmlDoc.Save("path/to/your/xml/file.xml");
The complete code to change the value of "Test5" to "Dog" in your XML file would look like this:


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("path/to/your/xml/file.xml");

XmlElement textbox5 = xmlDoc.SelectSingleNode("//textbox5") as XmlElement;
textbox5.InnerText = "Dog";

xmlDoc.Save("path/to/your/xml/file.xml");
Note that this code assumes that there is only one element with the name "textbox5" in the XML file. If there are multiple elements with the same name, you'll need to modify the XPath expression passed to the SelectSingleNode method to locate the correct element.
2 messaggi dal 28 febbraio 2023
Ciao Domenico,

Sì, è possibile modificare un valore all'interno di un file XML utilizzando il linguaggio di programmazione C# e la libreria System.Xml.

Puoi seguire i seguenti passaggi per modificare la voce "Prova5" in "Cane":

Importa la libreria System.Xml nel tuo progetto C#.

Carica il file XML in una variabile XmlDocument.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("path/to/your/xml/file.xml");


Seleziona l'elemento "textbox5" utilizzando il metodo SelectSingleNode e modifica il valore utilizzando la proprietà InnerText.

XmlNode textbox5Node = xmlDoc.SelectSingleNode("//textbox5");
textbox5Node.InnerText = "Cane";


Salva le modifiche apportate al file utilizzando il metodo Save.

xmlDoc.Save("path/to/your/xml/file.xml");


L'intero codice dovrebbe apparire come segue:

using System.Xml;

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("path/to/your/xml/file.xml");

XmlNode textbox5Node = xmlDoc.SelectSingleNode("//textbox5");
textbox5Node.InnerText = "Cane";

xmlDoc.Save("path/to/your/xml/file.xml");


Spero che questo ti sia utile!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.