Search code examples
xmldelphidelphi-2010indentationauto-indent

IXMLDocument.SaveToFile() uses tab character for indentation instead of spaces


I have an XML file, which is originally formatted using space indents (2 spaces for each nested item).

When I load and save this file using IXMLDocument, space indents are changing to the tab characters (code #9).

Here is the code:

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

I tried to use NodeIndentStr property - no result:

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

Used FormatXMLData too - no result:

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

How can I save with space indents instead of tab characters?


Solution

  • There is an option in IXMLDocument where the parser can be told to preserve white spaces.

    Use it like this :

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

    Disclaimer: I haven't tried it.