2010-07-31 7 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); 

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

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

Заранее благодарен!

+1

Я в замешательстве ... почему вы говорите, что он не закрыт надлежащим образом? Он выглядит закрытым для меня ... –

+0

Это действительно непонятно, что вы имеете в виду. Где происходит переполнение стека? Почему вы не хотите, чтобы ваш корневой элемент закрывался? Почему вы ожидаете, что XmlWriter создаст недопустимый вывод? –

+0

Что заставляет вас поместить второй фрагмент кода (или подходящий вызов) между вызовами запуска и завершения элемента ExceptionList? – cristobalito

ответ

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

0

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

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

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

+0

Да, это вызвало переполнение stackoverflow. Я добрался до него. TBH, я никогда не использовал пробелы в тэгах xml. Я не знаю, почему я сделал это время: o Спасибо за ваш комментарий! – Yustme

Смежные вопросы