96 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.
296 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 -

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.