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

나는 혼란 스럽다. 왜 제대로 닫히지 않았다고 말하는가? 그것은 나에게 보이지 않는다 ... –

+0

그것은 당신이 의미하는 것이 정말로 분명하지 않다. 스택 오버플로가 어디에서 발생합니까? 왜 루트 엘리먼트가 닫히지 않게 하시겠습니까? 왜 XmlWriter가 잘못된 결과를 내기를 기대합니까? –

+0

ExceptionList의 시작과 끝 요소 호출 사이에 두 번째 코드 조각 (또는 적절한 호출)을 넣는 것을 중단하는 것은 무엇입니까? – cristobalito

답변

3

코드가 올바르므로 ExceptionsList 요소가 닫히는 방식을 변경할 필요가 없습니다.

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

나는 믿을 : 두 번째 조각에서

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

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

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

, 당신은 XML 사양이 그 금지와 같이, 당신의 XDocument 인스턴스로 당신의 요소를 추가, 요소 이름에서 그 공백을 제거해야 문제는 여기에 있습니다 :

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

어느 Exception TypeException Mesage는 XML 요소에 대한 유효한 이름입니다. 그럼, 물론 (운명) 메서드를 사용하면 오류를 기록 ... 스택 오버플로.

+0

그게 stackoverflow의 원인입니다. 나는 그것의 타는 것을 얻었다. TBH, xml 태그에 공백을 사용하지 않았습니다. 왜 내가이 시간을했는지 모르겠다. o 의견을 보내 주셔서 감사합니다! – Yustme

관련 문제