http://blog.naver.com/techshare/100151160015
위의 글에서 퍼온겁니다.
예를 들어, 다음과 같은 문서를 로드한 경우,
XmlDocument 로 Load/Save 를 하면 기본적으로는 다음과 같이 저장됩니다.
사용자가 멋있게(?) 포맷팅 해 둔 텍스트 파일의 형식이 날아가 버린 것입니다. 이를 방지하려면 다음과 같이 Load 이전에 PreserveWhitespace = true 설정을 해주시면 됩니다.
이렇게 로드된 파일을 저장하면 다음과 같이 서식(?)이 유지된답니다. ^^
재미있는 것은 PreserveWhitespace 가 Load 이전에 설정했을 때와 Save 이전에 설정했을 때가 동작 방식이 다르다는 점입니다.
더욱 재미있는 점은, 위의 문서 내용과는 다르게 다음과 같이 Save 이전에 값을 true로 설정해 주면 아예 공백 문자들이 모두 날아간 최적화된(?) 문자열을 반환한다는 것입니다.
이렇게 해서 공백을 아예 제거하는 방법과, 사용자의 원본 서식을 유지하는 방법을 알아봤는데요. 그렇다면 '들여쓰기'를 정규화시켜서 출력을 해주고 싶다면 어떻게 해야 할까요? 그럴 때는 다음과 같이 XmlWriterSettings 옵션을 사용하시면 됩니다. ^^
그럼, 출력 결과는 다음과 같이 네모반듯(?)하게 나옵니다. ^^
이 정도 자유롭게 출력할 수 있으니... XML 사용에 주저하지 마시길 바랍니다. ^^
(첨부된 파일은 위의 코드를 포함한 예제 프로젝트입니다.)
위의 글에서 퍼온겁니다.
아는 분과 이야기를 하다가, 그 분은 XML 파일로 설정 저장을 하는 것이 싫어서 "Key=Value" 형식의 포맷으로 저장하는 간단한 라이브러리를 사용한다고 하십니다. ^^ XML 이 싫은 이유인 즉, 저장하면서 기존 파일에 있던 공백/라인 형식이 모두 제거되고 다시 정렬되기 때문이라고 했습니다.
아하~~~ 아직도 모르고 계셨군요. ^^
예를 들어, 다음과 같은 문서를 로드한 경우,
<?xml version="1.0" encoding="utf-8" ?> <configure> <myParam>1</myParam> </configure>
XmlDocument 로 Load/Save 를 하면 기본적으로는 다음과 같이 저장됩니다.
<?xml version="1.0" encoding="utf-8"?> <configure> <myParam>5</myParam> </configure>
사용자가 멋있게(?) 포맷팅 해 둔 텍스트 파일의 형식이 날아가 버린 것입니다. 이를 방지하려면 다음과 같이 Load 이전에 PreserveWhitespace = true 설정을 해주시면 됩니다.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load("test.xml");
이렇게 로드된 파일을 저장하면 다음과 같이 서식(?)이 유지된답니다. ^^
<?xml version="1.0" encoding="utf-8" ?> <configure> <myParam>5</myParam> </configure>
재미있는 것은 PreserveWhitespace 가 Load 이전에 설정했을 때와 Save 이전에 설정했을 때가 동작 방식이 다르다는 점입니다.
XmlDocument.PreserveWhitespace Property ; http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx
If PreserveWhitespace is true before Save is called, white space in the document is preserved in the output; otherwise, if this property is false, XmlDocument auto-indents the output.
더욱 재미있는 점은, 위의 문서 내용과는 다르게 다음과 같이 Save 이전에 값을 true로 설정해 주면 아예 공백 문자들이 모두 날아간 최적화된(?) 문자열을 반환한다는 것입니다.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("test.xml");
xmlDoc.PreserveWhitespace = true;
xmlDoc.Save(Console.Out);
// 출력 결과:
<?xml version="1.0" encoding="utf-8"?><configure><myParam>5</myParam></configure>
이렇게 해서 공백을 아예 제거하는 방법과, 사용자의 원본 서식을 유지하는 방법을 알아봤는데요. 그렇다면 '들여쓰기'를 정규화시켜서 출력을 해주고 싶다면 어떻게 해야 할까요? 그럴 때는 다음과 같이 XmlWriterSettings 옵션을 사용하시면 됩니다. ^^
XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = " "; // 4개의 공백 문자 settings.NewLineChars = Environment.NewLine; settings.NewLineHandling = NewLineHandling.Replace; XmlWriter writer = XmlWriter.Create(Console.Out, settings); xmlDoc.Save(writer);
그럼, 출력 결과는 다음과 같이 네모반듯(?)하게 나옵니다. ^^
<?xml version="1.0" encoding="ks_c_5601-1987"?> <configure> <myParam>5</myParam> </configure>
이 정도 자유롭게 출력할 수 있으니... XML 사용에 주저하지 마시길 바랍니다. ^^
(첨부된 파일은 위의 코드를 포함한 예제 프로젝트입니다.)