2017-01-09 69 views
1

我必須使用修改的值更新原始XML文件。下面是我的示例XML文件:如何使用C#更新XML中的節點值

<request> 
<facility> 
<alternateIDs> 
      <alternateID code="ALT8">11111111</alternateID> 
      <alternateID code="ALT12">111111111</alternateID> 
      <alternateID code="ALT">1111111111</alternateID> 
      <alternateID code="ALT1">11111111</alternateID> 
      <alternateID code="ALT9">11111111</alternateID> 
      <alternateID code="ALT3">111111111</alternateID> 
</alternateIDs> 
</facility> 
</request> 

現在我想尋找alternateID code="ALT"和它的值改爲00000000。我最後的文件應該是這樣的:

<request> 
<facility> 
<alternateIDs> 
      <alternateID code="ALT8">11111111</alternateID> 
      <alternateID code="ALT12">111111111</alternateID> 
      <alternateID code="ALT">00000000</alternateID> 
      <alternateID code="ALT1">11111111</alternateID> 
      <alternateID code="ALT9">11111111</alternateID> 
      <alternateID code="ALT3">111111111</alternateID> 
</alternateIDs> 
</facility> 
</request> 

我怎樣才能做到這一點使用XElementXAttributes?我不熟悉XML和C#。任何幫助表示讚賞!

回答

1

知道了!

public static void ReplaceCode() 
    { 
     var root = new XmlDocument(); 
     root.Load(@"C:\data.xml"); 

     foreach (XmlNode e in root.GetElementsByTagName("alternateID")) 
     { 
      if (e.Attributes["code"].Value.Equals("ALT")) 
      { 
       e.FirstChild.Value = "00000000"; // FirstChild because the inner node is actually the inner text, yeah XmlNode is weird. 
       break; 
      } 
     } 
     root.Save(@"C:\data.xml"); 
    } 

向我提問吧,我可以解釋清楚。 :)

+0

非常感謝你..我明白了! :-) ..唯一的事情是一旦價值被設置爲0000000,我想走出循環。但在這裏打破,實際上是把控制權交給腳本的最後一行,而不是循環後的直接行。 – chits

+0

太棒了!很高興我能幫上忙。如果你認爲這是好的,你應該向前付款並+1回答,以便其他人可以看到。 :)我剛剛經歷了同樣的問題,所以我只好迴應。 hahahaha – MistaGoustan

+0

我該怎麼做!答案?我標記它完成。 – chits

0

試試這個:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication34 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      XElement alt = doc.Descendants("alternateID").Where(x => (string)x.Attribute("code") == "ALT").FirstOrDefault(); 
      alt.Value = "00000000"; 

     } 


    } 


} 
+0

我不能使用linq XML。我正在嘗試使用XMLDocument,XML元素,但我失去了一些東西。 – chits

0

這裏是做這件事的非LINQ的方式,雖然LINQ是乾淨多了,如果你知道如何讀它。

public static void ReplaceCode() 
    { 
     var root = XElement.Load(@"C:\data.xml"); 
     foreach (var e in root.Descendants("alternateID")) 
     { 
      if (!e.Attribute("code").Value.Equals("ALT")) continue; 
      e.Value = "00000000"; 
      break; 
     } 
     root.Save(@"C:\data.xml"); 
    } 
+1

對我來說莫名其妙Xelement,Xdocument被禁用,我只能使用XMLelement,XMLDocument等。 – chits

+0

沒有問題,我剛剛發佈的第二個答案解決了。我保持這個答案爲其他人帶來好處。它在jdwengs sweet linq聲明旁邊很好。 – MistaGoustan