2010-07-20 5 views
7

내가 목록쓰기 XML - '토큰의 startElement 에필로그 잘못된 XML 문서 초래 상태'오류

 for (int i = 0; i < 15; i++) 
     { 
      string headname = (headers[0] as List<string>)[i]; 
       headname.Replace("&", "&amp;"); 
       headname.Replace("<", "&lt;"); 
       headname.Replace(">", "&gt;"); 
       headname.Replace("\"", "&quot;"); 
       headname.Replace("'", "&apos;"); 
      textWriter.WriteStartElement("MetadataName", ""); 
      textWriter.WriteString(headname); 
      textWriter.WriteEndElement(); 

문제의 ArrayList에 데이터를 복용, XML 문서에 쓰기를 시도하고있다 나는 for 루프를 한 번 통과 한 후 WriteStartElement가있는 줄에 'Epilog 상태의 Token StartElement가 잘못된 XML 문서가 될 것입니다'오류가 발생하고이를 해결하는 방법을 찾으려고했습니다. 정말로 돌파구가 없었습니다. 감사.

EDITED for update.

+0

입니다

<MetadataName><header0/><header1/></MetadataName> <MetadataName><header0/><header1/></MetadataName> 

처럼 하나 개

귀하의 문서입니다 이 문제는 프레이밍 코드 – Mark

답변

5

귀하의 문제는 여기에 있습니다 :

textWriter.WriteStartElement("Metadata Name", ""); 

요소 이름은 공백을 포함 할 수 없습니다. 이 시도 :

textWriter.WriteStartElement("MetadataName", ""); 

을 나는 당신의 headers 배열의 데이터가 아니라 (예를 들어, 모든 &&amp; 등 ...에 이스케이프) XML 형성되는 것을 가정하고있다.

또한 Mark는 자신의 대답에서 XML이 루팅되었는지 확인해야합니다. 즉, MetadataName 요소를 넣는 루트 요소가 있는지 확인해야합니다.

well formed XML을 읽고 이것이 의미하는 바는 문서를 구성 할 때 문서의 형식이 올바른지 확인해야한다는 것입니다.

+0

을 다시 넣지 마십시오. 공백을 이름에서 제거하고 불량 문자를 변경했지만 오류가 발생하기 때문에 잘못된 배열을 작성하거나 잘못된 배열을 가져야합니다. – omicronlyrae

+0

@omicronlyrae - 답변이 업데이트되었습니다. – Oded

7

XML 문서에는 루트 요소, 즉 다른 모든 요소가 포함 된 루트 요소가 있습니다. 당신이하지 않아도 당신은 당신의 루프 주위 WriteStartElement 및 WriteEndElement 필요

<root> 
    <MetadataName><header0/><header1/></MetadataName> 
    <MetadataName><header0/><header1/></MetadataName> 
</root> 

같이하는 XML 문서는 원래 코드가 표시

+1

감사합니다. 그것은 지금 저장합니다. 다음으로 할 일은 XML을 유효한 것으로 만드는 것입니다. – omicronlyrae