2012-04-21 19 views
-1

嗨,我的目標是允許XML文件寫入一個新的XML文檔,如果它不存在,如果它確實存在,然後將元素添加到XML文件。問題是,如果在else if()語句後給我一個錯誤,說明「xwriter在當前上下文中不存在」。 Thanx如果xml文件存在執行某些任務

到目前爲止,我已經嘗試過這個,但它不工作。

 private void button1(object sender, EventArgs e) 
    { 

     if (!File.Exists("doc.xml")) 
     { 
      XmlTextWriter xwriter = new XmlTextWriter("doc.xml", Encoding.UTF8); 
      XmlWriterSettings settings = new XmlWriterSettings(); 
     } 

     else if (File.Exists("doc.xml")) 
     { 
      xwriter.Formatting = Formatting.Indented; 
      xwriter.WriteStartDocument(); 
      xwriter.WriteStartElement("myCourse"); 
      xwriter.WriteString("Test"); 
      xwriter.WriteEndElement(); 
     } 

    } 
+0

無論您的解決方案,這些作家都應該被包裹在'using'以避免泄漏 – 2012-04-21 20:35:45

回答

1

你有兩個主要問題

1)您else聲明試圖使用聲明,並在聲明if創建的變量。也就是說,xwriter根本不存在於else中,因爲它位於代碼分支的if分支的範圍內。要在else語句中使用它,它必須在if語句之前聲明,以便代碼的ifelse分支都可以使用它。

2)您不能附加到XML文件。如果在if語句之外創建xwriter,代碼將編譯並運行,但代碼塊將簡單覆蓋xml文件的現有內容。

追加到,你的願望,你需要打開文件,尋找到根/文檔元素的結束標記開始的位置,然後使用XML作家寫的那麼其改寫結束標記和形式的XML新的,有效的XML。要關閉文件,您必須附加原始文本,爲根/文件元素添加新的結束標記,以便xml文件保持有效。

另一種(效率較低)方法是從文件加載XML,然後重寫現有內容以及新數據。

(你也不需要檢查文件是否存在兩次)

0

變量xwriter僅在第一個if塊中定義 - 您必須將其作爲全局變量才能在第二個塊中定義。

請注意,您使用的構造XmlTextWriter的截斷的XML文件,如果它存在,所以你必須切換到構造函數接受一個流參數。

還要注意的是,你不應該WriteStartDocument現有文件...

總而言之,XML是不是很好,當你需要增量數據附加到現有文件 - 考慮切換到一個不同的,如果儘可能。

相關問題