2009-05-17 3 views
4

하여 XmlTextWriter를 사용할 때이XmlTextWriter를 사용할 때 xml 요소 값에 개행 문자를 들여 쓰는 방법?

그래서 기본적으로 내가 원하는 줄 바꿈 후 들여 쓰기를 시도하고이

<?xml version="1.0" encoding="utf-16"?> 
<element> 
    a 
</element> 

하지만 난 여기에이

<?xml version="1.0" encoding="utf-16"?> 
<element> 
a 
</element> 

를 얻을 수 아래의 코드를 사용하여 내 현재 테스트입니다 하네스

[Test] 
public void XmlIndentingTest() 
{ 
    var provider = new StringBuilder(); 
    var settings = new XmlWriterSettings 
         { 
          Indent = true, 
          IndentChars = " ", 
         }; 
    using (var writer = new StringWriter(provider)) 
    { 
     using (var xmlWriter = XmlTextWriter.Create(writer, settings)) 
     { 
      xmlWriter.WriteStartElement("element"); 
      xmlWriter.WriteString("\r\na\r\n"); 
      xmlWriter.WriteEndElement(); 
     } 
    } 
    Debug.WriteLine(provider.ToString()); 
} 

답변

6

들여 쓰기 지정 writer에서 ed는 중요한 공백이없는 요소들 사이의 들여 쓰기를위한 것이다. 생성하려는 공백은 여는 태그와 닫는 태그 사이의 텍스트 값의 일부를 형성하기 때문에 중요합니다.

작성자가 정상적인 XML을 수행하는 경우 허용되지 않는 방식으로 텍스트 콘텐츠가 수정됩니다. 당신 스스로 이것을해야합니다.

+0

감사합니다. anthony. 이것은 내가 기대했던 것입니다. 나는 자동화 된 방법이 있기를 바랬다. – Simon

1

당신의 코드는 당신이 말한 것과 정확히 일치 합니다만, 나는 두려워합니다. 당신의 <element> 이미 들여 쓰기의 경우

xmlWriter.WriteStartElement("element"); //<element> 
xmlWriter.WriteString("\r\na\r\n");  //newline, directly followed by 'a' 
xmlWriter.WriteEndElement();   //</element> 

당신이 들여 쓰기를 원한다면, 당신은

xmlWriter.WriteString("\r\n\ta\r\n");  

같은 코드에서 그 접근 방식의 문제점을이 작성해야이라고, 그것까지 엉망 것 들여 쓰기 - 'a'는 여전히 정확하게 하나의 들여 쓰기가됩니다.

그래서 당신은 어떻게 든 들여 쓰기를 직접 계산하고 쓰기 탭의 적절한 수의, 또는 당신이 한 줄

<element>a</element> 

에서 전체 요소 이동이 확실히 명확하지만, 때 이상하게 보일 수 있습니다 할 수 있습니다 'a'는 매우 긴 텍스트가됩니다.

관련 문제