Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C#] modificare campi specifici di un file xml?

    Il mio problema è questo: come posso modificare un campo specifico di questo file xml? (Es. il campo "hourStart").
    Poi come posso distinguere i 2 nodi uguali "timer"?
    Grazie =)
    codice:
    <file>
      <timer>
        <hourStart>12:00</hourStart>
        <hourEnd>02:00</hourEnd>
        <status>Away</status>
        <mood>Pranzo</mood>
      </timer>
      <timer>
        <hourStart>19:00</hourStart>
        <hourEnd>20:00</hourEnd>
        <status>Away</status>
        <mood>Cena</mood>
      </timer>
    </file>

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Hai già visto le classi del namespace System.Xml e relativi esempi pubblicati?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    In C# non ho idea di come si faccia...ma come logica, se sei certo della struttura del file, puoi individuare i nodi e i sottonodi semplicemente contandoli, ad esempio il primo timer è il n° 0, il secondo n° 1, i sottonodi seguono lo stesso principio come figli del primo (0 0, 0 1, 0 2, ecc,) ma avendo un nome possono essere identificati come "0 hourStart", ecc.
    Poi, per quanto ne so, per individuare un nodo in un file xml si segue qualcosa simile alla logica delle cartelle in windows, ad esempio:
    file\timer\ecc...

    Comunque, per le mie conoscenze, una struttura del genere:
    codice:
    <file>
      <timer1>
        <setting name="hourStart">
          <value>12:00</value>
        <setting name="hourEnd">
          <value>02:00</value>
        <setting name="status">
          <value>Away</value>
        <setting name="mood">
          <value>Pranzo</value>
      <timer1>
    
      <timer2>
        <setting name="hourStart">
          <value>19:00</value>
        <setting name="hourEnd">
          <value>20:00</value>
        <setting name="status">
          <value>Away</value>
        <setting name="status">
          <value>Away</value>
      <timer2>
    </file>
    credo sia più "malleabile"...è presa pari pari dal file user.config che genera un programma in vb.
    I timer1 e 2 rappresentano i nodi mentre i relativi setting rappresentano le sue proprietà con i loro nomi e valori.
    Quindi potresti sostituire timer1 e 2 con "Away" o "Pranzo", e quando imposti i timer per uno di essi ne vai a leggere le proprietà per impostarlo, dipende comunque da come pensi di implementare il tutto nel tuo programma.
    Di più non so

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Vinsent
    Comunque, per le mie conoscenze, una struttura del genere [...]
    credo sia più "malleabile"...
    Io direi proprio di no: se mai ci fosse la necessità di validare il documento XML, ad esempio con uno Schema XSD, quella struttura sarebbe ingestibile.

    E' un po' come se si volesse numerare i paragrafi di una pagina HTML e si proponesse di chiamare i tag <p1>... <p2>... <p3>...

    La forma scelta dall'utente è formalmente corretta, se la sua intenzione è quella di memorizzare le impostazioni di un numero imprecisato di timer.

    Dopodiché, con le classi di manipolazione XML del Framework, non è difficile aprire il documento e ricercare, selezionare, enumerare e modificare nodi, attributi e valori.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    allora mi spiego meglio,
    io so come modificare un elemento.

    File xml semplice che riesco a modificare:
    codice:
    <xml>
      <ID>1234</ID>
      <Voice>Off</Voice>
      <SmallWindow>False</SmallWindow>
    </xml>
    con questa riga riesco a modificare il valore di 1 elemento:
    codice:
    xml.DocumentElement.SelectSingleNode("/xml/ID").InnerXml = "1";
    ma in questo caso io devo andare a modificare 1 altro file xml diversamente strutturato(quello del primo messaggio), come si potrebbe modificare?
    Mi aiuterebbero molto degli esempi =)

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da bombe93
    io so come modificare un elemento.
    [...]
    ma in questo caso io devo andare a modificare 1 altro file xml diversamente strutturato(quello del primo messaggio), come si potrebbe modificare?
    Usi lo stesso procedimento.
    Francamente non riesco a capire la difficoltà.

    Come ho già detto, leggi la documentazione MSDN relativa alla classe che già utilizzi, XmlDocument.

    C'è scritto tutto quello che c'è da sapere.

    Se c'è qualcosa di specifico che non riesci a fare, spiega cos'è, perché il file XML che già hai modificato non è molto diverso da quello di esempio che hai postato, oppure non è chiaro quale sia la tua difficoltà specifica dell'ultimo rispetto al primo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    in poche parole non riesco ad identificare un nodo specifico.

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da bombe93
    in poche parole non riesco ad identificare un nodo specifico.
    Usa SelectNodes per individuare tutti i nodi che rispondo a un'espressione XPath, del tutto simile a quella che hai già utilizzato in precedenza (solo che in quell'occasione ne hai preso solo uno, usando SelectSingleNode).

    Il metodo ti restituisce la lista dei nodi XML che rispondono all'espressione, quindi puoi enumerarli (se devi leggerli tutti) oppure puoi riferirti precisamente a uno di questi usando l'indice, che varia come sempre da 0 (zero) a Count - 1.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Ho riscontrato un errore per cancellare un nodo specifico e il codice è il seguente:

    Dove sbaglio?
    codice:
    XmlDocument xml = new XmlDocument();
    
    XmlNodeList nodeList;
    
    fileXml = "Commander.xml";
    
    xml.Load(fileXml);
    
    nodeList = xml.DocumentElement.SelectNodes("/Commander");
    
    nodeList.Item(1).ParentNode.RemoveChild(nodeList.Item(1));
    
    xml.Save(fileXml);

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da bombe93
    Ho riscontrato un errore
    Sarebbe interessante sapere qual è...

    Originariamente inviato da bombe93
    il codice è il seguente [...]
    A prescindere dall'errore non specificato, senza il documento XML di riferimento non posso nemmeno risalire alla logica o all'operazione che vuoi fare perché non ho la minima idea della struttura del file che stai manipolando, né di quello che devi ottenere.

    Se si vuole ottenere aiuto, si dovrebbe almeno cercare di dare le informazioni sufficienti che servono a capire il problema, altrimenti si perde solo tempo nel chiedere ogni volta le informazioni mancanti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.