2013-10-23 7 views
0

나는 그것을 필요로 할 때,이 서식 쓸 수 있도록 온/XmlWriterIndent 재산 사용을 중지 하시겠습니까 :XmlWriter 들여 쓰기 속성을 설정/해제하는 방법은 무엇입니까?

<?xml version="1.0" encoding="Windows-1252"?> 
<Songs> 
    <Song><Name>My Song 1.mp3</Name><Year>2007</Year></Song> 
    <Song><Name>My Song 2.mp3</Name><Year>2009</Year></Song> 
    <Song><Name>My Song 3.mp3</Name><Year>2008</Year></Song> 
</Songs> 

문제는 그 속성을 수정하는 방법을 몰라 , 나는이 속성을 한 번 이상 설정하지 않을 가능성이 다른 다른 질문을 읽었습니다 ...하지만 ... 대신 XmlWriter을 사용할 경우 언제든지 들여 쓰기를 켜고 끌 수 있습니다. XmlTextWriter Framework 2.0에서 있으므로 클래스 XmlWriter이 현재 XmlTextWriter보다 훨씬 많기 때문에 들여 쓰기 속성을 수정할 방법이 없다고 생각할 수 없습니다.

난 그냥 XmlWriter 미래의 일에 완전히 무용지물이 될 수 있기 때문에 대신 XmlWriterXmlTextWriter를 사용하지 것이다, 나는 프레임 워크 현재 클래스의 논리를 사용하고 기존 클래스에 내 코드를 기반으로하지 않는 역자 주.

또한 "WriteString 메서드로 들여 쓰기 및 wrtie 줄 바꾸기"와 같은 까다로운 작업을 수행하지 않을 것입니다. 왜냐하면 특정 줄에 예외가 발생하기 때문입니다.

명확히하기 위해, 나는 단지 원할 때 언제든지 들여 쓰기를 켜고 끄는 데 일조 한 XmlWriter의 들여 쓰기 속성이나 숨은 방법을 켜고 끌 것입니다.

여기 코드입니다. 단지 들여 쓰기 속성을 수정하려고 시도했을 때 예외가 발생하지만, 말한 것처럼 XmlTextWriter에서 할 수 있습니다 ... 이것은 너무 이상합니다 .

Dim xmlsettings As XmlWriterSettings = _ 
    New XmlWriterSettings() With { _ 
     .Indent = True, _ 
     .Encoding = System.Text.Encoding.Default} 

Dim Xml As XmlWriter = XmlTextWriter.Create(xmlfile, xmlsettings) 

Private Sub Write_SongInfo_Node(ByVal xml As XmlWriter, 
        ByVal Name As String, _ 
        ByVal Year As String) 

    xml.WriteStartElement("Song") 

    xml.Settings.Indent = False 

    xml.WriteStartElement("Name") 
    xml.WriteString(Name) 
    xml.WriteEndElement() 

    xml.WriteStartElement("Year") 
    xml.WriteString(Year) 
    xml.WriteEndElement() 

    xml.Settings.Indent = True 

    xml.WriteEndElement() 

    ' xml.WriteString(Environment.NewLine) 

End Sub 
+2

이유는 무엇입니까의 형식은' xml' 상관 없어? – flindeberg

+2

@flindeberg 논란의 여지는 있지만 개보수와 탭을 제외하여 파일 크기를 줄일 수 있지만 xml을 그다지 최적화하지 않으면 xml이 잘못된 기술입니다. – Gusdor

+1

@Gusdor 그 경우,'XmlWriterSettings.Indent'를'false'로 설정하고 거기에 두지 않으시겠습니까?나는이 특정한 경우에 이상하게 여겼다. 이해가 가지 않는다. – flindeberg

답변

1

당신이 당신의 작가 인스턴스를 만들 때 한 번에 전체 작가 적용되는 XmlWriterSettings하고 읽기 전용 모드로 전환보다. 이 모드를 전환 할 수있는 유일한 방법은 하나뿐입니다. XmlWriterSettings.Reset() 메서드를 사용하면 도움이 될지 모르겠습니다. XmlTextWriter에는 들여 쓰기에 대한 고유 한 서식 지정 옵션이 있으며 각 요소 작성 단계에서 확인합니다. 즉 XmlTextWriter은 고유 한 기능을 사용하여 들여 쓰기를 작성하며 xmlwriter 들여 쓰기 속성을 사용하지 않습니다.

  • 재정의 기본 동작, 예를 들면 : 쓰기 요소가있는 할 수 있습니다에 대한 사용자 정의 로직을 구현 - 그래서 당신이 하나의 작업 결정이 ("노래"와 같은) 요소를 이름을 확인하고 생략 쓸모 들여 쓰기 기호
  • 스위치 오프 XmlWriter를 들여 쓰기 (XmlWriterSettings.Indent = false) 당신이 필요로 할 때 수동으로 들여 쓰기를 쓸 것이다 당신의 자신의 방법을 추가 그것을
1

XmlWriter의 들여 쓰기 설정을 지정할 수 없습니다. xmlSetting 객체를 Write_SongInfo_Node 프로 시저에 전달하고 xmlSetting .Indent = True or False 으로 설정하면됩니다.

감사합니다,