2010-06-24 66 views
3

我喜歡如何使用LINQ爲XML C#

<Root> 
     <Steps> 
      <Step Test="SampleTestOne" Status="Fail" /> 
      <Step Test="SampleTestTwo" Status="Fail" /> 
     </Steps> 
    </Root> 

我需要改變或步驟元素改寫「狀態」的屬性值的XML文件中設置屬性的XML元素。

現在,我使用XmlDocument的這個 像

 XmlDocument XDoc = new XmlDocument(); 
     XDoc.Load(Application.StartupPath + "\\Sample.xml"); 
     XmlNodeList NodeList = XDoc.SelectNodes("//Steps/Step"); 
     foreach (XmlNode Node in NodeList) 
     { 
      XmlElement Elem = (XmlElement)Node; 
      String sTemp = Elem.GetAttribute("Test"); 
      if (sTemp == "SampleTestOne") 
       Elem.SetAttribute("Status", "Pass"); 

     } 

我需要搜索元素,並更新狀態

有沒有辦法做到這一點使用XDocumentin C#

謝謝提前

回答

4
string filename = @"C:\Temp\demo.xml"; 
XDocument document = XDocument.Load(filename); 

var stepOnes = document.Descendants("Step").Where(e => e.Attribute("Test").Value == "SampleTestOne"); 
foreach (XElement element in stepOnes) 
{ 
    if (element.Attribute("Status") != null) 
     element.Attribute("Status").Value = "Pass"; 
    else 
     element.Add(new XAttribute("Status", "Pass")); 
} 

document.Save(filename); 
+0

@ Anthony Pegram:謝謝。如果不存在這樣的屬性(「狀態」),則拋出異常。 如果沒有這樣的屬性存在,我需要創建屬性,然後添加值。 請解釋一下 – 2010-06-24 14:45:24

+0

@Pramodh,編輯於 – 2010-06-24 14:50:18

2

您可以使用此功能代碼:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(xmlFile); 
XmlNode node = xmlDoc.SelectSingleNode("Root/Steps/Step"); 
node.Attributes["Status"].Value = "True"; 
xmlDoc.Save(xmlFile); 
+0

他想要一個Linq方法,我認爲這是爲了學習的目的,因爲他知道替代方法。 – 2010-06-24 14:34:48

+0

哦,我錯過了,謝謝 – SageNS 2010-06-24 14:46:01