2013-05-27 38 views
0

所以這裏的時候是拋出異常異常創建基於C#與WriteStartElement()XML文件

#region Header 
      if (textBox2.Text != "") 
      { 
       try 
       { 
        xmlTW.WriteStartElement("Header"); 
        xmlTW.WriteRaw(Environment.NewLine); 
        xmlTW.WriteString(textBox2.Text); 
        xmlTW.WriteRaw(Environment.NewLine); 
        xmlTW.WriteEndElement(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 
      } 
      #endregion 


      #region Body 
      if (textBox3.Text != "") 
      { 
       try 
       { 
        xmlTW.WriteStartElement("Rectangles"); 
        xmlTW.WriteRaw(Environment.NewLine + textBox3.Text + Environment.NewLine); 
        xmlTW.WriteEndElement(); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 
      } 
      #endregion 

因此,代碼,問題是,代碼將順利只運行如果兩個文本框一個充滿與數據,如果他們都包含文本我得到一個無效的操作異常在WriteEndDocument();

我知道它一定是簡單的東西,但我無法弄清楚:P。 任何幫助表示讚賞。

在此先感謝。

+0

你在文檔的開頭有這個嗎? <?xml version =「1.0」encoding =「utf-8」?> –

+0

是的,無論如何感謝您的回覆:P – Mitsosp

回答

4

格式良好的XML必須有一個單個的根元素。以下是格式良好的XML:

<Header> 
Some text 
</Header> 

它有良好的形成,因爲Header是根元素存在。但是,以下是不正確的:

<Header> 
Some text 
</Header> 
<Rectangles> 
Some other text 
</Rectangles> 

要糾正它,你必須把它放在一些根元素。

<myRoot> 
<Header> 
Some text 
</Header> 
<Rectangles> 
Some other text 
</Rectangles> 
</myRoot> 
+0

非常感謝,不知道我必須將所有內容都包裝在通用容器中。 – Mitsosp

3

您需要的XmlWriterSettings ConformanceLevel設置爲Fragment

這將使你保持你想要不增加的根元素

var xmlWriterSettings = new XmlWriterSettings(); 
xmlWriterSettings.ConformanceLevel = ConformanceLevel.Fragment; 

的XML結構,創建一個XML這樣寫:

XmlWriter xmlTW = XmlWriter.Create("myFile.xml", xmlWriterSettings) 

This鏈接可以幫助你開始使用的XmlWriter工作

+1

哦,我看到了,這是非常有用的,兩個答案都被接受了,但我已經使用上述解決方案解決了問題。請記住您的解決方案以及感謝tutorial.I將upvote一旦我達到所需的代表。 再次感謝。 – Mitsosp

+1

這可能可能解決異常。不過,我認爲更好的做法是保持XML格式良好。 – YK1

+0

@Mitsosp謝謝! – Mzf