2011-08-18 63 views
1

我有以下XML文件:如何覆蓋xml文件中的節點?

<WindowEntries> 
<WindowEntry> 
    <Name>maduranga</Name> 
    <View>TRN_UNIT</View> 
    <LU>TrnUnit</LU> 
    <DefaultWindowText /> 
    <Flags>0</Flags> 
</WindowEntry> 
<WindowEntry> 
    <Name>tbwBrandOverView</Name> 
    <View>TRN_BRAND</View> 
    <LU>TrnBrand</LU> 
    <DefaultWindowText /> 
    <Flags>0</Flags> 
</WindowEntry> 
<WindowEntries> 

我編寫了一個XML一個TreeView。用戶從樹形視圖中選擇一個WindowEntry進行編輯後,用戶在入口中選擇一個條目值後加載一些文本框進行編輯。用戶完成編輯後,我將其保存。保存後,xml文件看起來像這樣:

<WindowEntries> 
<WindowEntry> 
<Name>maduranga</Name> 
<View>maduranga</View> 
<LU>maduranga</LU> 
<Flags>maduranga</Flags> 
</WindowEntry> 
<WindowEntry> 
<Name>tbwBrandOverView</Name> 
<View>TRN_BRAND</View> 
<LU>TrnBrand</LU> 
<Flags>0</Flags> 
</WindowEntry> 
**<WindowEntry> 
<Name>newvalue</Name> 
<View>newvalue</View> 
<LU>newvalue</LU> 
<Flags>newvalue</Flags> 
</WindowEntry>** 
<WindowEntries> 

但我想用「newvalue」覆蓋「madurang」值。 這是我用於編輯的代碼。

 XmlTextReader reader = new XmlTextReader("component.xml"); 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(reader); 
      reader.Close(); 
      XmlNode currNode; 
      XmlDocumentFragment docFrag = doc.CreateDocumentFragment(); 
      try 
      { 
       string path3 = treeView1.SelectedNode.FullPath.ToString(); 
       docFrag.InnerXml = "<WindowEntry>" + 
          "<Name>" + textBox7.Text + "</Name>" + 
          "<LU>" + textBox8.Text + "</LU>" + 
          "<View>" + textBox9.Text + "</View>" + 
          "<Flags>" + textBox10.Text + "</Flags>" + 

          "<OverrideDefaultHome>" + textBox11.Text + "</OverrideDefaultHome>" + 
          "<AssociatedHomepage>" + textBox12.Text + "</AssociatedHomepage>" + 
          "</WindowEntry>"; 

         currNode = doc.SelectSingleNode("Component/WindowEntries"); 


         currNode.AppendChild(docFrag); 

         doc.Save("component.xml"); 
         } 

回答

0

Linq-XML簡單而強大。

filename = @"c:\path\sample.xml"; 

    XDocument doc = XDocument.Load(filename); 

    var result = (from node in doc.Descendants("WindowEntry") 
         where node.Element("Name").Value == "maduranga" 
         select node.Element("Name")).ToList(); 

    if(result.Count!=0) 
    result[0].Value = "NewValue"; 

    doc.Save(filename); 
+0

它會好的。但名稱,觀點,價值觀發生的事情完全是尊重。 – maduranga