Hallo,
da ich anfangs in einem meiner Projekte TXMLDocument bzw. IXMLDocument verwendet habe und irgendwann an gewissen Unzulänglichkeiten gestoßen bin, wie z.B. die fehlende Implementierung von CDATA-Tags und das Nicht-Funktionieren unter der Linux-Konsole (mit Kylix kompiliert, aber ohne X-Server betrieben) habe ich für die XDOM-Klassen (
www.philo.de/xml/dom/) eine Wrapper-Klasse geschrieben. Diese unterstützt alles, was ich bisher brauche, arbeitet aber vorzugsweise mit Strings und nicht mit Variants und die NextSibling-Funktionen.
Weiterhin werden CDATA-Sections unterstützt. Die Klasse findet sich unten angehängt.
Die Anwendung ist ziemlich ähnlich dem TXMLDocument:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| var xml:TWDOMXMLDocument; node:TWDOMXMLNode; begin xml:=NewXMLDocument; xml.DocumentElement:=CreateElement('root',''); with xml.DocumentElement do begin node:=AddChild('erster'); node.AddChild('erstes_Kind','EinWert'); node.AddAttribute('erstes_Kind_Attribut'); node.Attributes['erstes_Kind_Attribut']:='Ein Attribut-Wert';
AddCDATAChild('CDATA-Test','Irgendwas was später nicht geparst werden soll ;-)');
ShowMessage(ChildNodes['CDATA-Test'].Text); node:=node.NextSibling; ShowMessage(node.Text); end; ShowMessage(xml.XML.Text); |
Wie man in dem Beispiel sieht, kann man bei dieser Klasse (anders als der Ursprungsimplementierung) direkt in AddChild einen Wert zuweisen lassen, muss man aber nicht.
Weiterhin gibt NextSibling den nächsten Knoten zu einem Knoten aus.
Die Unit ist dazu gedacht, schnell Implementation von TXMLDocument ersetzen zu können. Dazu muss in vielen Fällen nur die Unit eingebunden und die Variablentypen geändert werden (natürlich sollte XDOM schon vorhanden sein
). Ansonsten sollten die alten Units noch entfernt werden, da teilweise (z.B. NewXMLDocument) gleich Bezeichner verwendet werden.
Da mir diese Unit so ausreicht, bin ich nicht sicher, ob ich weitere Features implementieren werde. Aber ihr könnt mir gerne Anregungen geben, ich versuch diese dann umzusetzen. Vor allem wäre es aber auch schön, mich auf Bugs und Verbesserungsmöglichkeiten hinzuweisen
Änderungen
==========
13.05.06
- Änderungen zur Kompatibilität mit XDOM 3.2. Für Version 3.1 muss das Define am Anfang der Unit geändert werden.
09.02.06:
- Bugfix: 2 Memory-Leaks beseitigt
21.01.06:
- Bugfix: ChildValues erzeugt nicht automatisch ein entsprechendes Node
24.08.05:
- Einige Änderungen am Code vorgenommen, um die Unit mit XDOM 3.1.21 lauffähig zu machen (Vielen Dank an Jens[HTN]
01.07.05:
- Bug in NextSibling gefixt, der bei mehreren gleich benannten ChildNodes auftrat
- Funktion PreviousSibling hinzugefügt
07.04.05:
- Direktes Laden von Dateien mit mehreren Möglichkeiten
- ChildNodes, die nicht existieren, werden nun automatisch erzeugt
- First und Last werden nun unterstützt, um das erste und das letzte Element aufzurufen