Ich benutze für
XML-Dateien bisher diese (sehr) einfache Komponente:
http://www.torry.net/authorsmore.php?id=4366
Das durchaus etwas sinnfreie Beispiel zum Erstellen und Laden von
XML-Dateien habe ich mal so runtergeschrieben, es könnte also noch der ein oder andere Fehler drin sein, dass es nicht kompiliert!
Delphi-Quellcode:
var
XMLDoc: TgmXML;
//Write XML
XMLDoc := TgmXML.Create(self);
XMLDoc.Nodes.Clear;
XMLDoc.Nodes.AddOpenTag('
list');
XMLDoc.Nodes.AddOpenTag('
item');
XMLDoc.Nodes.AddLeaf('
name').AsString := '
Maier';
XMLDoc.Nodes.AddLeaf('
plz').AsInteger := 12345;
XMLDoc.Nodes.AddLeaf('
ort').AsString := '
Musterhausen';
XMLDoc.Nodes.AddCloseTag;
XMLDoc.Nodes.AddOpenTag('
item');
XMLDoc.Nodes.AddLeaf('
name').AsString := '
Müller';
XMLDoc.Nodes.AddLeaf('
plz').AsInteger := 2345;
XMLDoc.Nodes.AddLeaf('
ort').AsString := '
Entenbach';
XMLDoc.Nodes.AddCloseTag;
XMLDoc.Nodes.AddCloseTag;
XMLDoc.SaveToFile('
file.xml');
XMLDoc.Free;
//END of Write XML
//Read XML
var
MyString:
string;
i: Integer;
XMLDoc := TgmXML.Create(self);
XMLDoc.Nodes.Clear;
XMLDoc.LoadFromFile('
file.xml');
if XMLDoc.Nodes.NodeByName['
list'] <>
nil then begin
for i := 0
to XMLDoc.Nodes.NodeByName['
list'].Children.Count-1
do begin
with XMLDoc.Nodes.NodeByName['
list'].Children.Node[i]
do begin
if Children.NodeByName['
name'] <>
nil
then MyString := Children.NodeByName['
name'].AsString;
if Children.NodeByName['
plz'] <>
nil
then MyString := Children.NodeByName['
plz'].AsInteger;
if Children.NodeByName['
ort'] <>
nil
then MyString := Children.NodeByName['
ort'].AsString;
end;
end;
end;
XMLDoc.Free;
//END of Read XML
Inhalt der Datei 'file.xml' wäre dann:
Code:
<?
xml version="1.0"?>
<list>
<item>
<name>Maier</name>
<plz>12345</plz>
<ort>Musterhausen</ort>
</item>
<item>
<name>Müller</name>
<plz>2345</plz>
<ort>Entenbach</ort>
</item>
</list>
Ein bischen problematisch bei dieser Klasse ist das Codieren der Sonderzeichen in ihre
HTML-Entsprechungen. Bin nicht mehr ganz sicher, wie das im Original war, da ich die Klasse immer entsprechend angepasst benutzt habe, aber ich meine mit der Kodierung hatte ich Probleme, weil da " in " umgewandelt wurde (korrekt) aber dann nachträglich noch dieses " in &quot; umgewandelt wurde, was einfach nur falsch ist, aber auch von der Klasse selber nicht mehr korrekt geladen werden kann, da die Reihenfolge der Codierung beim Laden nicht zu der beim Speichern passt.
Daher die dringende Empfehlung, die AsString-Getter und -Setter in der Klasse überarbeiten, also alles raus bis auf nötige Codierung für < und >
oder halt das Codieren vervollständigen und vorallem in entsprechender Reihenfolge, dass sich da nicht solche Abhängigkeiten ergeben