2012-02-07 8 views
8

Prima di tutto questo è C#. Sto creando un cruscotto di Internet per un piccolo gruppo di colleghi nel NHS. Di seguito è riportato un esempio di file xml in cui è necessario modificare il testo interno di. Devo sostituire un elemento specifico, ad esempio "Officina1". Poiché abbiamo alcuni workshop, non posso permettermi di utilizzare uno scrittore generale perché sostituirà tutte le informazioni sul documento XML con questo un bit di codice qui sotto.Sostituzione del testo interno di un nodo Xml/elemento

<?xml version="1.0" ?> 
    <buttons> 
     <workshop1>hello</workshop1> 
     <url1>www.google.co.uk</url1> 

Sto usando un caso interruttore per selezionare un laboratorio specifico in cui è possibile cambiare il nome e aggiungere un URL del workshop e utilizzando questo codice qui sotto sostituirà l'intero documento.

public void XMLW() 
    { 
     XmlTextReader reader = new XmlTextReader("C:\\myXmFile.xml"); 
     XmlDocument doc = new XmlDocument(); 

     switch (comboBox1.Text) 

     { 
      case "button1": 


       doc.Load(reader); //Assuming reader is your XmlReader 
       doc.SelectSingleNode("buttons/workshop1").InnerText = textBox1.Text; 
       reader.Close(); 
       doc.Save(@"C:\myXmFile.xml"); 
       break; 


     } 


    } 

Quindi, solo per chiarire voglio che il mio programma C# per la ricerca attraverso il documento XML trovare l'elemento "Workshop 1" e sostituire l'InnerText con il testo da una casella di testo. ed essere in grado di salvarlo senza sostituire l'intero documento con un nodo. Grazie per aver guardato.

+2

C'è un motivo per cui non si sta utilizzando l'XDocument o almeno l'API 'XmlDocument'? Solitamente si usa 'XmlReader' /' XmlWriter' se si devono elaborare * enormi * file XML. –

+0

Beh, sono un po 'un novellino in C#. Quindi, per far funzionare il programma generale, sto mescolando codice e poi quando posso vederlo funzionare posso cambiare il codice per renderlo più efficiente. In questo modo posso imparare la differenza tra modi brutti e puliti di fare le cose e capire i vantaggi di entrambi. Tuttavia, grazie per la tua guida, cercherò di utilizzare XMLReader/XMLWriter ora. – Marshal

+0

Il mio consiglio era di NON usare 'XmlReader' /' XmlWriter' ... –

risposta

10

Utilizzando XmlDocument e XPath si può fare questo

XmlDocument doc = new XmlDocument(); 
doc.Load(reader); //Assuming reader is your XmlReader 
doc.SelectSingleNode("buttons/workshop1").InnerText = "new text"; 

È possibile utilizzare doc.Save per salvare il file anche.

Maggiori informazioni su XmlDocument su MSDN.

EDIT

Per salvare il documento fare questo

doc.Save(@"C:\myXmFile.xml"); //This will save the changes to the file. 

Spero che questo ti aiuta.

+0

Penso che funzioni. L'unico problema ora è che non mi permetterà di salvare il documento. Sto usando il "doc.Save;" Tuttavia viene visualizzato un errore ** "Solo un'assegnazione, una chiamata, un incremento, un decremento e nuove espressioni oggetto possono essere utilizzate come una dichiarazione." ** È perché non sto utilizzando un XMLWriter? o? Ho lavorato su questo programma per così tanto tempo che probabilmente sono un idiota. Se guardi sopra puoi vederlo ammendato. – Marshal

+0

Si prega di controllare la mia risposta aggiornata. –

+0

Modificato il codice sopra per mostrare ora che funziona e per gli utenti futuri come riferimento. Grazie ad Amar Palsapure. – Marshal