2011-05-19 10 views
6

Burada bir kod sipariş bilgisine sahip bir XML dosyası oluşturan aşağıdaki kod var. Ve bu XML dosyasındaki bir girişi, her şeyi silmeyi ve her şeyi tekrar eklemeyi değil, güncelleyebilmek istiyorum.XAttribute Değeri XAttribute Name = X

ben bunu yapabilirsiniz biliyorum:

xElement.Attribute(attribute).Value = value; 

Ama nitelik elinde tuttuğu için, aynı adla her özellik değişecektir. Örneğin, girişin kimliği "jason" a eşit olduğunda sadece bir şeyin değerini nasıl değiştirebilirim? XML dosyasını yüklemem gerekir, değiştirmek istediğim öznitelik için bir eşleşme bulana kadar tüm dosya üzerinde yinelemeli, sonra değiştirmeli ve sonra dosyayı yeniden kaydetmem gerekir mi?

Her türlü yardım/öneri çok takdir edilmektedir.

Eğer

İşte benim XML dosyası gibi görünür ederiz:

 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> 

cevap

6

şey: Eğer belirli

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

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

By almak için bu kodu kullanabilirsiniz böylece Sen XML kök elemanı biliyorum XML dosyası oluşturulur gibi

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

Teşekkür ederiz :) @Alex –

2

Önce güncellemek istediğiniz eleman aramak gerekir. Eğer bulursanız, güncellemeyi yapın. İşiniz bittiğinde XDocument'i tekrar dosyaya kaydetmeyi unutmayın. Böyle

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

Teşekkür ederiz :) @Jeff –

2

Bu Elementi şimdi alabilirsin Jkust Değerini Kontrol Et ve istediğin gibi değiştir.

+0

Hmm, Hiç böyle bir şey görmedim. Çok ilginç şeyler! Teşekkürler @Vir, bunu kontrol edeceğim :) –

İlgili konular