2012-04-18 2 views
7

원래 공간 들여 쓰기 (각 들여 쓰기 된 항목에 대해 2 공백)를 사용하여 서식이 지정된 XML 파일이 있습니다.IXMLDocument.SaveToFile()은 공백 대신 들여 쓰기에 탭 문자를 사용합니다.

IXMLDocument를 사용하여이 파일을로드하고 저장할 때 스페이스 들여 쓰기가 탭 문자 (코드 9 번)로 변경됩니다. 여기

코드입니다 :

var 
    FileName: String; 
    Document: IXMLDocument; 
... 
Document := XMLDoc.LoadXMLDocument(FileName); 
Document.SaveToFile(FileName); 

내가 NodeIndentStr 속성을 사용하려고 - 아니 결과 :

Document := XMLDoc.LoadXMLDocument(FileName); 
Document.NodeIndentStr := ' '; 
Document.SaveToFile(FileName); 

이 너무 FormatXMLData을 사용 - 어떤 결과 :

Document := XMLDoc.LoadXMLDocument(FileName); 
Document.XML.Text := XMLDoc.FormatXMLData(Document.XML.Text); 
Document.Active := True; 
Document.SaveToFile(FileName); 

어떻게 할 수 탭 문자 대신 공백 들여 쓰기로 저장 하시겠습니까?

+1

당신은 Zarko Gajic에 의해이 문서를 읽어보십시오, [델파이 포맷-XML 노드 들여 쓰기 (http://delphi.about.com/od/delphitips2009 /qt/delphi-format-xml-node-indent.htm). 제공된 솔루션은'xmlDoc.FormatXMLData'를 사용하여 파일을 좋은 방식으로 포맷합니다. –

+0

@LURD 시도했습니다 - 아니 결과 : ( – Andrew

+0

어디 지금은 문제가 거짓말,'FormatXMLData'는 당신이 그 함수에 문자열을 전달하기 때문에'NodeIndentStr'이 사용하고있는 것을 알 수 없으므로 기본 TAB을 사용합니다 char. – TLama

답변

11

IXMLDocument에는 공백을 보존하라는 옵션이 있습니다.

이처럼 사용

Document.ParseOptions := 
    Document.ParseOptions+[poValidateOnParse]+[poPreserveWhiteSpace]; 

면책 조항 : 나는 그것을 시도하지 않았습니다.

+0

+1. 지금 D5에 있는데 델파이의 최신 버전에서는 테스트 할 수 없지만'IXMLDocument'가'IXMLDOMDocument'를 감싸는 래퍼라면'IXMLDOMDocument'로 테스트했습니다. – kobik

+1

예, 작동합니다. 고맙습니다. 참고 :'LoadFromFile()' – Andrew

+0

+1 전에 'ParseOptions'도 설정해야합니다. 이것은 트릭을합니다. 아마도 'NodeIndentStr'이나'doNodeAutoIndent' 옵션을 사용할 필요가 없다는 말은 괜찮습니다. 문자열을'FormatXMLData' 함수 (문서 자체가 아닙니다)에 전달하기 때문에 자체 설정이 있습니다. 그리고 당신은'poValidateOnParse' 플래그를 제거 할 수 있습니다 ;-) – TLama

0

무엇이 다른지 잘 모르겠지만 Document.ParseOptions + [poValidateOnParse, poPreserveWhiteSpace];에 액세스 할 수 없습니다. 유사한

뭔가 일 :

var 
    xmlDoc: IXMLDOMDocument2; 

xmlDoc := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument2; 
xmlDoc.validateOnParse := True; 
xmlDoc.preserveWhiteSpace := True; 
관련 문제