2010-11-29 2 views
4

끔찍한 들여 쓰기, 공백 라인, 노드 덩어리가 함께 일렬로 된 XML 문서가 끔찍한 형식의 델파이 프로젝트 파일입니다.프로그래밍 방식으로 XML을 재 형식화하는 방법은 무엇입니까?

<BorlandProject><Delphi.Personality><Parameters><Parameters Name="HostApplication">C:\Some\Path\Filename.exe</Parameters> <!--etc--> <Excluded_Packages> 


</Excluded_Packages> 

멋지게 형식을 바꾸고 싶습니다. Win32/COM을 사용하여 프로그래밍 방식으로 가장 쉬운 방법은 무엇입니까? MSXML의 경우 어떻게해야합니까?

나도 들여 쓰기 단위 (탭/여러 공백) 지정할 수 싶습니다.

델파이의 MSXML 래퍼 TXmlDocument를 사용해 보았는데 실제로 빈 줄과 들여 쓰기 노드를 탭과 함께 삭제하지만 다음과 같은 줄은 나누지 않습니다 :

<BorlandProject><Delphi.Personality><Parameters><Parameters Name="HostApplication">C:\Some\Path\Filename.exe</Parameters> <!--etc--> <Excluded_Packages> 
+0

xsltproc을 보았습니까? –

+0

커맨드 라인 툴인 것처럼 보이지만 XML/XSLT를 처음 접했을 때 나는 오해하고있다. – himself

답변

15

을 프로젝트 파일 및 작품 괜찮아, 모든 라인을 올바르게 들여 쓰기.

이 코드를 확인하십시오.

uses 
XMLIntf, 
XMLDoc; 

Procedure FormatXMLFile(const XmlFile:string); 
var 
    oXml : IXMLDocument; 
begin 
    oXml := TXMLDocument.Create(nil); 
    try 
    oXml.LoadFromFile(XmlFile); 
    oXml.XML.Text:=xmlDoc.FormatXMLData(oXml.XML.Text); 
    oXml.Active := true; 
    oXml.SaveToFile(XmlFile); 
    finally 
    oXml := nil; 
    end; 
end; 
+0

일부 버전 (Delphi 2007 포함)에서 TXMLDocument 변수의 iirc usgae가 메모리 누수를 일으켰습니다 ... 아직 델파이 2009에서는 테스트하지 않았지만 이후로는 IXMLDocument 유형 변수 만 사용하고 있습니다. 아마도이 코드 예제에서 Free를 사용하는 대신 nil에 대한 참조를 설정하는 이유가 무엇일까요? – mjn

+0

RRUZ, IXMLDocument로 정의하지 않아야합니까? 참조 카운팅에 의존하기 때문에 해제해야합니다. 또한 XMLIntf는 uses 절에 추가되어야합니다. –

+0

앨런, 네 말이 맞아. 코드가 수정되었습니다. – RRUZ

관련 문제