2011-05-19 14 views
6

Tengo el siguiente código que crea un archivo XML con una gran cantidad de información de pedido. Y me gustaría poder actualizar una entrada en este archivo XML, en lugar de eliminar todo y volver a agregar todo de nuevo.Actualizar XAttribute Value donde XAttribute Name = X

Sé que puedo hacer esto:

xElement.Attribute(attribute).Value = value; 

Pero eso va a cambiar todos los atributos con el mismo nombre que tiene atributo. ¿Cómo puedo cambiar solo el valor de algo cuando el Id de la entrada es igual a "jason", por ejemplo? ¿Tendría que cargar el archivo XML, repetir todo el archivo hasta que encuentre una coincidencia para el atributo que deseo cambiar, luego cambiarlo y luego guardar el archivo nuevamente?

Cualquier ayuda/sugerencia es muy apreciada.

Gracias

Esto es lo que mi archivo XML se parece a:

 XElement xElement; 
     xElement = new XElement("Orders"); 

     XElement element = new XElement(
      "Order", 
      new XAttribute("Id", CustomId), 
      new XAttribute("Quantity", Quantity), 
      new XAttribute("PartNo", PartNo), 
      new XAttribute("Description", Description), 
      new XAttribute("Discount", Discount), 
      new XAttribute("Freight", Freight), 
      new XAttribute("UnitValue", UnitValue), 
      new XAttribute("LineTotal", LineTotal) 
      ); 
     xElement.Add(element); 
     xElement.Save(PartNo + ".xml"); 


<?xml version="1.0" encoding="utf-8"?> 
<Orders> 
    <Order Id="V45Y7B458B" Quantity="2" PartNo="5VNB98" Description="New Custom Item Description" Discount="2.00" Freight="2.90" UnitValue="27.88" LineTotal="25.09" /> 
    <Order Id="jason" Quantity="2" PartNo="jason" Description="New Custom Item Description" Discount="2.00" Freight="2.90" UnitValue="27.88" LineTotal="25.09" /> 
</Orders> 

Respuesta

6

Algo como esto:

var doc = XDocument.Load("FileName.xml"); 
var element = doc.Descendants("Order") 
    .Where(arg => arg.Attribute("Id").Value == "jason") 
    .Single(); 
element.Attribute("Quantity").Value = "3"; 
doc.Save("FileName.xml"); 
+0

Gracias :) @Alex –

2

primer lugar usted necesita para buscar el elemento que desea actualizar. Si lo encuentras, haz la actualización. Solo recuerda guardar el XDocument en el archivo cuando hayas terminado.

XDocument doc = ...; 
var jason = doc 
    .Descendants("Order") 
    .Where(order => order.Attribute("Id").Value == "jason") // find "jason" 
    .SingleOrDefault(); 
if (jason != null) // if found, 
{ 
    // update something 
    jason.Attribute("Quantity").SetValue(20); 
} 
doc.Save(...); // save if necessary 
+0

Gracias :) @Jeff –

2

Como se creó el archivo XML Usted sabe que el elemento raíz del XML para que pueda utilizar este código para obtener el particular,

TaxonPath = XElement.Parse(xml as string); 
txtSource.Text = FindGetElementValue(TaxonPath, TaxonPathElement.Source); 

    XElement FindGetElementValue(XElement tree,String elementname) 
    { 
    return tree.Descendants(elementName).FirstOrDefault() ; 
} 

Por esto Ahora puedes obtener el Elemento jkust Comprueba su Valor y Cámbialo como lo desees.

+0

Hmm, nunca he visto algo así. Cosas muy interesantes! Gracias @Vir, lo comprobaré :) –

Cuestiones relacionadas