Zitat von
xZise:
Aber er meckert rum, wenn er versucht die Beschreibung zu speichern
wer meckert wo rum?
Zitat:
text node can't constain subnodes
besagt ja sozusagen, das Problem ... CDATA ist ein Node, welcher keine anderen Geschwister-Nodes haben darf.
nun möchte dieser Code
Code:
XML.RootNode.Name := 'qd2';
XML.RootNode.AddNode('file');
XML.RootNode.AddNode('file\filename').Text := EFilename.Text;
XML.RootNode.AddNode('file\source').Text := ESource.Text;
[color=#ff0000]
XML.RootNode.AddNode('file\description', xtCData)[/color].Text := MDescription.Text;
XML.RootNode.AddNode('file\size').Text := SESize.Value;
XML.RootNode.AddNode('file\destination').Text := SESize.Value;
soeine
XML erstellen (welches natürlich nicht
XML-konform wäre)
Code:
<?
xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<qd2>
<file>
<filename>C:\EFilename.Text</filename>
<source>ESource.Text</source>
[color=#ff0000]<![CDATA[MDescription.Text]]>[/color]
<size>SESize.Value</size>
<destination>SESize.Value</destination>
</file>
</qd2>
du möchtests aber eigentlich Dieses
Code:
<?
xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<qd2>
<file>
<filename>C:\EFilename.Text</filename>
<source>ESource.Text</source>
[color=#ff0000]<description><![CDATA[MDescription.Text]]></description>[/color]
<size>SESize.Value</size>
<destination>SESize.Value</destination>
</file>
</qd2>
nun gibt es mehrere Wege ... z.B.:
Delphi-Quellcode:
XML.RootNode.AddNode('
file\description').AddNode('
', xtCData).Text := MDescription.Text;
XML.RootNode.AddNode('
file\description\', xtCData).Text := MDescription.Text;
Node :=
XML.RootNode.AddNode('
file\description');
Node.asCDATA(True);
Node.Text := MDescription.Text;
ein Leername '' zum Erstellen, da der CDATA-Naode ja namenslos ist
(OK, eigentlich ist der Name dieses Nodes "CDATA", aber das ist ja egal und ich unterstützt diesbezüglich auch keine anderen Namen, drum der Leername, da hier der Name den Typ des Inhalts angibt und laut
XML-Spec eh nur dieser Typ vordefiniert ist)
aber dank xoNodeAutoCreate und da UTF-8 eh Standard ist, würde ich es einfach nur so machen
Delphi-Quellcode:
XML := TXMLFile.Create;
try
XML.RootNode.
Name := '
qd2';
XML.Node['
file\filename'].Text := EFilename.Text;
XML.Node['
file\source'].Text := ESource.Text;
XML.Node['
file\description'].asCDATA(True);
XML.Node['
file\description'].Text := MDescription.Text;
XML.Node['
file\size'].Text := SESize.Value;
XML.Node['
file\destination'].Text := SESize.Value;
XML.SaveToFile(SDSave.FileName);
finally
XML.Free;
end;
Zitat:
Und könntest du nicht ein kleines Tutorial schreiben
Mal sehn, ich versuche nebenbei mir endlich mal wieder eine Webseite auszubauen und in die dort enstehende Befehlsreferenz + kleine Hilfe könnte man bestimmt ein paar Beispiele und Dergleichen mit einbauen.
Aber erstmal muß die Webseite entstehen
Noch 'ne andere Frage.
Eigentlich hatte ich ja angefangen diese Klassen auch mit auf Interaces umzustellen,
nur gibt es da ein kleines Problem
Egal was ich Versuche, es bleibt dennoch ein Mischmasch aus Interfaces und Objekten,
sei es durch Verwendung von TStream und der ObjektSerialisierung und die Variants passen auch nicht so ganz mit den Interface-Philosophi zusammen.
Ja, es gibt IStream, aber das ist in Delphi komplett unabhngig von TStream und auch wenn ich mit dafür eigene Objekte erstellen, dann brauch ich auch noch einen Umweg zum normalen TStream, um auch diesen zu unterstützen.
Das Problem war gerade, daß ich nun mal endgültig auf Interfaces umstellen wollte, aber dieses einfach nicht komplett möglich ist
Nun bleibt also noch der andere Weg:
ich entferne die Interfaces wieder komlett raus und lasse alles einheitlich auf Objekten (dürfte auch etwas übersichtlich werden)
Würde sich also jemand drann stören, wenn ich nun doch zukünftig keine Objekte mehr anbieten werde?
(hatte ja eh immernoch das besch*** Problem mit der nicht richtig funktionierenden Referenzzählung)
Der Hauptgrund für die Interfaces war ja, daß ich ich mal sehr große
XML-Dateien unterstützen wollte, ohne das man diese in den
RAM kopieren muß (wenn es überhaupt möglich wäre).
Allerdings gibt es ja zum Lesen schon den
SAX-Parser und demnächst entsteht auch noch ein
SAX-Writer als Gegenstück ... und mit den Beiden wären ja ein sequentieller lesender oder schreibender Zugriff auf Dateien bis in den ExaBeyte-Bereich (64 Bit) möglich.
Außerdem sind schon Pläne für einen bedingt Schreibenden und Lesenden
XML-LogFile-Writer vorhanden.
Welcher dann sozusagen und unter Bestimmten Bedinungen speichersparend (
RAM) in beliebig große Dateien neue Daten/Nodes einfügen könnte.
Also meinerseits gibt es nun/bald keinen wichtigen Grund mehr für Interfaces.