Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi OmniXML und Save methode mit ofIndent (https://www.delphipraxis.net/131355-omnixml-und-save-methode-mit-ofindent.html)

moelski 23. Mär 2009 20:32


OmniXML und Save methode mit ofIndent
 
Moin !

Also entweder mache ich hier was grundlegend falsch, oder da gibts ein Problem bei OmniXML.
Ich habe folgende einfache XML Datei:

XML-Code:
<?xml version="1.0" encoding="(UTF-8)"?>
<Language>
  <Form>
    <Caption>Dies ist der Text</Caption>
  </Form>
</Language>
So und nun nutze ich folgenden Quellcode:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var xmlDoc         : IXMLDocument;
begin
  xmlDoc   := CreateXMLDoc;
  xmlDoc.Load(ExtractFilePath(Application.ExeName) + '\Lang.xml');
  xmlDoc.Save(ExtractFilePath(Application.ExeName) + '\Lang.xml', ofIndent);
end;
Das ist total sinnfrei ... Ich weiss. Aber normalerweise ändere ich zwischen dem Lesen und dem Schreiben noch Werte.
So jedenfalls wenn ich das nach dem Speichern ansehe würde ich erwarten das die XML Datei immer noch so ausschaut wie vorher. Aber statt dessen schaut die dann so:
XML-Code:
<?xml version="1.0" encoding="(UTF-8)"?>




<Language>
 
 
  <Form>
   
   
    <Caption>No errors found in XML document!</Caption>
 
 
  </Form>


</Language>
Wo kommen die ganzen Leerzeilen weg ?! Ich blicks gerade nicht. :gruebel:

uligerhardt 24. Mär 2009 10:01

Re: OmniXML und Save methode mit ofIndent
 
Vorneweg - ich bin kein XML-Experte. :-)

Zitat:

Zitat von moelski
Wo kommen die ganzen Leerzeilen weg ?! Ich blicks gerade nicht. :gruebel:

Zum Formatieren muss in die XML-Datei Whitespace (Zeilenumbrüche, Leerzeichen) eingefügt werden. Diesen interpretiert der Parser normalerweise als Textknoten. Um ihm das abzugewöhnen, setzt du PreserveWhiteSpace auf False:
Delphi-Quellcode:
procedure Test;
var
  xmlDoc: IXMLDocument;
  path: string;
begin
  path := ExtractFilePath(ParamStr(0)) + '\Lang.xml';
  xmlDoc := CreateXMLDoc;
  xmlDoc.PreserveWhiteSpace := False;
  xmlDoc.Load(path);
  xmlDoc.Save(path, ofIndent);
end;
HTH,
Uli.

moelski 24. Mär 2009 10:04

Re: OmniXML und Save methode mit ofIndent
 
Moin !

Genau die Info hab ich auch vor wenigen Minuten vom Autor bekommen.

Dennoch Danke !!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz