Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.112 Beiträge
 
Delphi 12 Athens
 
#135

Re: himXML (gesprochen himix ML)

  Alt 31. Aug 2009, 11:47
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat