2010-07-31 92 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