2016-02-09 63 views
1

我想在做一些修改後從XML文件中讀取值,並且我想將它寫入同一個文件。
注: - 它不應該從XML閱讀註釋值
從C#讀取XML文件中的值並寫入它#

Web.config文件: -

<add key="InputDataFileName" value="InputData.xml" /> 


這裏是我的代碼,

string inputxmlPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["InputDataFileName"]; 
      XmlReaderSettings readerSettings = new XmlReaderSettings(); 
      readerSettings.IgnoreComments = true; 
      XmlReader reader = XmlReader.Create(inputxmlPath, readerSettings); 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(reader); 
      var ParentNode = doc.SelectSingleNode("//TestData"); //This is the root Node 
      if (ParentNode.ChildNodes.Count > 0) 
      { 
       foreach (XmlNode child in ParentNode) 
       { 
        string elementName = child.LocalName; 
        switch (elementName) 
        { 
         case "URL": 
          for (int i = 0; i < child.ChildNodes.Count; i++) 
          { 
           XmlNode node = child.ChildNodes[i].FirstChild; 
           node.InnerText = CMEURL; 
          } 
          break; 
         case "LoadBalanceList": 
          for (int i = 0; i < child.ChildNodes.Count; i++) 
          { 
           XmlNode node = child.ChildNodes[i].FirstChild; 
           node.InnerText = CMEURL; 
          } 
          break; 
         case "Activity": 
          for (int i = 0; i < child.ChildNodes.Count; i++) 
          { 
           XmlNode node = child.ChildNodes[i].FirstChild; 
           node.InnerText = CMEURL; 
          } 
          break; 

         default: 
          break; 
        } 
       } 
      } 

      doc.Save(inputxmlPath); //Getting an exception here 

異常:IOException由用戶代碼未處理進程無法訪問文件'C:\ Users \ Desktop \ Patching \ source \ Automation \ InputData.xml',因爲它正在被另一個進程使用。

獲得在保存方法
不知道我做錯了什麼異常,誰能幫我
預先感謝

回答

3

你永遠不會關閉XmlReader,所以它仍然有一個用於閱讀的開放文件句柄 - 這意味着你不能寫入同一個文件。你應該把它放在一個using聲明:

var doc = new XmlDocument(); 
var settings = new XmlReaderSettings { IgnoreComments = true }; 
using (var reader = XmlReader.Create(inputXmlPath, settings)) 
{ 
    doc.Load(reader); 
} 

我個人使用的XDocument代替XmlDocument但:

XDocument doc; 
var settings = new XmlReaderSettings { IgnoreComments = true }; 
using (var reader = XmlReader.Create(inputxmlPath, settings)) 
{ 
    doc = XDocument.Load(reader); 
} 
+0

現在是工作,但註釋行得到了保存文件 – Aishu

+0

後overided @毗溼奴:你的意思並不完全清楚。我希望能夠有效地刪除任何評論,因爲你明確沒有閱讀它們。 –

+0

現在感謝我知道了...可以給我提供一些鏈接,以明確如何閱讀xml ..我會試試看...... – Aishu

1

您需要處置你的讀者的嘗試寫入文件之前:

XmlDocument doc = new XmlDocument(); 
using(var reader = XmlReader.Create(inputxmlPath, readerSettings))    
    doc.Load(reader); 

現在你仍然有讀者開放,使讀者在訪問該文件,當你調用doc.Save()XmlDocument試圖訪問的文件 同時。 using聲明負責爲您配置讀者,因此當您撥打Save()時,讀者不再使用該文件。與using聲明一起使用資源總是一個好主意,而不是手動關閉/處理資源。