Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML "Stil" (https://www.delphipraxis.net/124154-xml-stil.html)

WorstNightmare 15. Nov 2008 19:32


XML "Stil"
 
Hallo,

ich benutze TXMLDocument um eine XML-Datei zu erstellen. Das funktioniert auch an sich, allerdings ist die fertige Datei nicht eingerückt und daher schlecht leserlich, kann man das irgendwie automatisch machen lassen oder muss ich es manuell machen?

Delphi-Quellcode:
      case CountDots(name) of
        0:
        begin
          root := XML.DocumentElement.AddChild('imgdir');
          root.Attributes['name'] := name;
          XMLlb;
        end;

        1:
        begin
          root := XML.DocumentElement.ChildNodes[0].AddChild('imgdir');
          root.Attributes['name'] := Explode('.', name)[1];
          XMLlb;
        end;

        2:
        begin
          root := XML.DocumentElement.ChildNodes[0].ChildNodes[0].AddChild('imgdir');
          root.Attributes['name'] := Explode('.', name)[2];
          Inc(Index);
          XMLlb;
        end;

        3:
        begin
          root := XML.DocumentElement.ChildNodes[0].ChildNodes[0].ChildNodes[0].AddChild('imgdir');
          root.Attributes['name'] := Explode('.', name)[3];
          XMLlb;
        end;
      end;
Wie ihr an diesem Codeausschnitt seht ist die XML hinterher sehr verschachtelt und es ist mir wichtig, dass man die Werte auch noch gut im Editor lesen kann (wenn sie einfach nur von einem anderen Programm wieder eingelesen werden würde wäre es egal). Kann man dieses ChildNodes[0].ChildNodes[0] noch irgendwie optimieren?

Delphi-Quellcode:
procedure XMLlb;
begin
  XML.XML.Text := XML.XML.Text + sLineBreak;
  XML.LoadFromXML(XML.XML.Text);
end;
XMLlb soll nach jeder Änderung einen Zeilenumbruch einfügen (auch damit es besser lesbar ist), allerdings funktioniert das irgendwie auch nicht..

Ich hoffe ihr könnt mir helfen. :?

Prototypjack 15. Nov 2008 20:51

Re: XML "Stil"
 
Moin,

Soweit ich mich erinnere gibt es irgendwo ein AutoIdent Feature (Options?).

Grüße,
Max

WorstNightmare 15. Nov 2008 21:38

Re: XML "Stil"
 
Danke, das sieht doch jetzt schonmal etwas besser aus. Allerdings bekomme ich jetzt nachdem ein paar Werte gelesen wurden folgende Exception:
This operation can not be performed with a Node of type PCData.

Die kam vorher nicht, warum kommt sie jetzt?

WorstNightmare 18. Nov 2008 18:09

Re: XML "Stil"
 
So, ich habe es jetzt anders gelöst :)

Delphi-Quellcode:
      XML.XML.Text := FormatXMLData(XML.XML.Text);
      XML.Active := True;    // Wurde deaktiviert, wieder aktivieren
Jetzt ist die Einrückung schonmal perfekt, genau so wie ich es will.

Leider habe ich noch ein Problem: Alle Sonderzeichen wie z.B. <, > und " müssen durch z.B. &lt;, &gt; und &quot; ersetzt werden. Das ist kein Problem, bevor ich den Knoten dann anlege StringReplace ich einfach den Wert. Das klappt ja auch, nur scheint der XML-Parser alle & nochmal durch &amp; zu ersetzen, sodass sowas wie &amp;lt; entsteht, was natürlich unverwertbar ist. Es werden komischerweise nur & behandelt, nicht die anderen Zeichen.
Kann man das irgendwie abschalten / die anderen auch automatisch umstellen lassen?

Ich hoffe das ist mein letztes Problem XMLs betreffend und es wäre nett wenn ihr mir noch einmal helft! :)

xaromz 18. Nov 2008 18:42

Re: XML "Stil"
 
Hallo,

die Sonderzeichen musst Du nicht umwandeln, das macht der Parser selbst (wie Du ja schon bemerkt hast). Also einfach den Text schreiben, und die Komponente kümmert sich um den Rest.

Gruß
xaromz

WorstNightmare 18. Nov 2008 19:01

Re: XML "Stil"
 
Nein, er macht es eben nur beim & und nicht bei den anderen Zeichen.

Edit: Ah, ok, ich hatte mich geirrt. Er ändert nur nicht ' in &apos; .


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.

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