2010-07-31 96 views
1

我正在使用xmlwriter創建一個xml文檔。 xml文檔如下所示:Xml根節點未關閉

<?xml version="1.0" encoding="utf-8" ?> 
<ExceptionsList /> 

如何防止/>並正確地結束根節點?

因此,我不能追加任何東西到根節點。

我創建XML文件的代碼如下所示:

string formatDate = DateTime.Now.ToString("d-MMM-yyyy"); 

XmlTextWriter xmlWriter = new XmlTextWriter(xmlfileName, Encoding.UTF8); 

xmlWriter.Formatting = Formatting.Indented; 
xmlWriter.Indentation = 3; 
xmlWriter.WriteStartDocument(); 

xmlWriter.WriteStartElement("ExceptionsList"); // ExceptionsList (Root) Element 

xmlWriter.WriteEndElement(); // End of ExceptionsList (Root) Element 

xmlWriter.WriteEndDocument(); 

xmlWriter.Flush(); 
xmlWriter.Close(); 

我追加到根節點這樣的:

XDocument xml = XDocument.Load(xmlFileName); 
XElement root = xml.Root; 

root.Add(new XElement("Exception", 
    new XElement("Exception Type", exceptionType), 
    new XElement("Exception Message", exceptionMessage), 
     new XElement("InnerException", innerException), 
    new XElement("Comment", comment))); 

xml.Save(xmlFileName); 

這使我在運行時錯誤計算器太。

任何幫助,將不勝感激。

在此先感謝!

+1

我很困惑...你爲什麼說它沒有適當的關閉?它看起來對我來說很不利...... – 2010-07-31 22:40:53

+0

這真的不清楚你的意思。堆棧溢出發生在哪裏?爲什麼你不想讓你的根元素被關閉?爲什麼你會期望XmlWriter產生無效輸出? – 2010-07-31 22:41:19

+0

什麼阻止你在ExceptionList的開始和結束元素調用之間放置第二個代碼片段(或合適的調用)? – cristobalito 2010-07-31 22:43:01

回答

3

你的代碼是正確的,你不需要改變你的ExceptionsList元素是如何關閉的。

xmlWriter.WriteStartElement("ExceptionsList"); // ExceptionsList (Root) Element 

xmlWriter.WriteStartElement("Exception"); // An Exception element 
xmlWriter.WriteEndElement(); 

xmlWriter.WriteEndElement(); // End of ExceptionsList (Root) Element 

在你的第二個片段,你需要刪除的元素名稱那些白空間,作爲XML規範禁止這一點,添加元素融入你的XDocument例如,像這樣:

XDocument xml = new XDocument(); 
xml.Add(new XElement("Exception", 
    new XElement("ExceptionType", "Exception"), 
    new XElement("ExceptionMessage", 
     new XElement("InnerException", "innerException")), 
    new XComment("some comment"))); 

xml.Save("sample2.xml"); 
+0

謝謝魯本斯!這就是訣竅! :) – Yustme 2010-08-01 08:05:22

0

我相信問題就在這裏:

new XElement("Exception Type", exceptionType), 
    new XElement("Exception Message", exceptionMessage), 

無論Exception Type也不Exception Mesage是XML元素的有效名稱。那麼當然,如果您使用這個(註定)方法來記錄錯誤...堆棧溢出。

+0

是的,這是什麼導致了stackoverflow。我騎了它。 TBH,我從來沒有在xml標籤中使用空格。我不知道我爲什麼這次做了:o 感謝您的評論! – Yustme 2010-08-01 08:06:23