Xml根节点未关闭

时间:2010-07-31 22:34:25

标签: c# xml root stack-overflow

我正在使用xmlwriter来创建一个xml文档。 xml文档如下所示:

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

我如何阻止/&gt;并适当地结束根节点?

因此,我无法将任何内容附加到根节点。

我创建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);

这也给我一个运行时错误的堆栈溢出。

任何帮助都将不胜感激。

提前致谢!

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

我认为问题在于:

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

Exception TypeException Mesage都不是xml元素的有效名称。然后,当然,如果您使用(注定)方法来记录错误...堆栈溢出。