Корневой узел XML не закрыт - PullRequest
1 голос
/ 01 августа 2010

Я использую xmlwriter для создания 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);

Это также дает мне переполнение стека при ошибке во время выполнения.

Любая помощь будет оценена.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 01 августа 2010

Ваш код правильный, и вам не нужно менять способ закрытия элемента 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 голосов
/ 01 августа 2010

Я считаю, что проблема здесь:

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

Ни Exception Type, ни Exception Mesage не является допустимым именем для элемента xml.Конечно, если вы используете этот (обреченный) метод для регистрации ошибки ... переполнение стека.

...