2012-02-07 24 views
8

En primer lugar, esto es C#. Estoy creando un panel de internet para un pequeño grupo de colegas en el NHS. A continuación se muestra un archivo xml de ejemplo en el que necesito cambiar el texto interno de. Necesito reemplazar un elemento específico, por ejemplo, "Taller 1". Debido a que tenemos algunos talleres, no puedo permitirme el uso de un escritor general porque reemplazará toda la información en el documento XML con este código.Reemplazar el texto interno de un nodo/elemento Xml

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

estoy usando un caso interruptor para seleccionar un taller específico donde se puede cambiar el nombre y añadir una URL del taller y que utiliza este código de abajo reemplazará todo el 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; 


     } 


    } 

Así sólo para aclarar Quiero que mi programa en C# para buscar a través del documento XML encontrar el elemento "taller1" y reemplazar el InnerText con el texto de un cuadro de texto. y poder guardarlo sin reemplazar todo el documento con un nodo. Gracias por mirar.

+2

¿Hay algún motivo por el que no esté utilizando 'XDocument' o al menos la API' XmlDocument'? Normalmente solo usas 'XmlReader' /' XmlWriter' si tienes que procesar * enormes * archivos XML. –

+0

Bueno, soy un poco novato en C#. Entonces, para ejecutar el programa general, estoy atacando el código y luego, cuando lo veo funcionar, puedo cambiar el código para hacerlo más eficiente. Al menos de esta manera puedo aprender la diferencia entre las formas feas y limpias de hacer las cosas y comprender las ventajas de ambas. Sin embargo, gracias por su guía, buscaré usar XMLReader/XMLWriter ahora. – Marshal

+0

Mi consejo fue NO usar 'XmlReader' /' XmlWriter' ... –

Respuesta

10

Usando XmlDocument y XPath se puede hacer esto

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

Puede utilizar doc.Save para guardar el archivo también.

Más información sobre XmlDocument en MSDN.

EDITAR

Para guardar el documento en esta esperanza

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

esto le ayuda.

+0

Creo que está funcionando. El único problema ahora es que no me permitirá guardar el documento. Estoy usando el "doc.Save"; Sin embargo, se está produciendo un error ** "Solo se pueden usar expresiones de asignación, llamada, incremento, decremento y nuevo objeto como una instrucción." ** ¿Esto es porque no estoy usando un XMLWriter? ¿o? He estado trabajando en este programa durante tanto tiempo que probablemente sea yo un idiota. Si miras arriba, puedes verla enmendada. – Marshal

+0

Por favor, verifique mi respuesta actualizada. –

+0

Editó el código anterior para mostrar ahora que está funcionando y para futuros usuarios como referencia. Gracias a Amar Palsapure. – Marshal

Cuestiones relacionadas