Delphi-PRAXiS
Seite 14 von 35   « Erste     4121314 151624     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   himXML (gesprochen himix ML) (https://www.delphipraxis.net/130751-himxml-gesprochen-himix-ml.html)

himitsu 26. Aug 2009 16:17

Re: himXML (gesprochen himix ML)
 
Der <config> ist bei dir schon der RootNode (es kann ja nur Einen geben :lol: )

Also einfach das .Node['config'] danach weglassen.

Ansonsten müßtest du über XML.Nodes gehen, da sind die ganzen Wurzelelemente drin enthalten.
> XML.Nodes.Node['config']



PS: RootNode gibt immer den ersten und einzigen Daten-Knoten der Datei zurück.

franktron 26. Aug 2009 16:20

Re: himXML (gesprochen himix ML)
 
Danke jetzt gehts :D

himitsu 26. Aug 2009 16:28

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von franktron
Danke jetzt gehts :D

PS: wenn etwas nicht gefunden wird, kannst du auch mal xoNodeAutoCreate aus XML.Options entfernen, dann werden Exceptions geworfen.

in deinem Fall war es so, daß du auf Nodes zugreifen wolltest, welche nicht existierten und deßhalb automatisch angelegt wurden.
XML-Code:
<?xml version="1.0"?>
<config>
  <config>    
    <port\>
    <username\>
    <password\>
    <server\>
    <db\>
    <dbport\>
  </config>
  <port>35353</port>
  <username>frank</username>
  <password>12345</password>
  <server>lserv</server>
  <db>devtest</db>
  <dbport>3306</dbport>
</config>

xZise 29. Aug 2009 18:28

Re: himXML (gesprochen himix ML)
 
Hallo,
ich wollte QuickDownload etwas umschreiben und deine Lib benutzen.

Nun habe ich folgendes:
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var
  XML : TXMLFile;
begin
  if SDSave.Execute then
  begin
    XML := TXMLFile.Create;
    try
      XML.Encoding := 'UTF-8';
      XML.RootNode.Name := 'qd2';
      XML.RootNode.AddNode('file');
      XML.RootNode.AddNode('file\filename').Text := EFilename.Text;
      XML.RootNode.AddNode('file\source').Text := ESource.Text;
      XML.RootNode.AddNode('file\description', xtCData).Text := MDescription.Text;
      XML.RootNode.AddNode('file\size').Text := SESize.Value;
// FLAGS     XML.RootNode.AddNode('file\').Text := SESize.Value;
      XML.RootNode.AddNode('file\destination').Text := SESize.Value;
      XML.SaveToFile(SDSave.FileName);
    finally
      XML.Free;
    end;
  end;
end;
Aber er meckert rum, wenn er versucht die Beschreibung zu speichern :)

Und könntest du nicht ein kleines Tutorial schreiben ;)

MfG
xZise

himitsu 31. Aug 2009 11:47

Re: himXML (gesprochen himix ML)
 
Zitat:

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 :stupid:
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 :wall:

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. :freak:

Satty67 31. Aug 2009 14:43

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von himitsu
Würde sich also jemand drann stören, wenn ich nun doch zukünftig keine Objekte mehr anbieten werde?
[...]
Also meinerseits gibt es nun/bald keinen wichtigen Grund mehr für Interfaces.

:gruebel:

himitsu 31. Aug 2009 14:50

Re: himXML (gesprochen himix ML)
 
ups ...
Zitat:

Würde sich also jemand drann stören, wenn ich nun doch zukünftig keine Interfaces mehr anbieten werde?
nja, aktuell ist es so, das man das ganze Projekt als Objekt-Version oder als Interface-Version kompilieren kann

TXMLFile, TXMLNode und Co.
oder
IXMLFile, IXMLNode und Co.

Weil ja Interfaces soooowas von "cool" sind, hatte ich mal angefangen alles auf Diese umzustellen
(aktuell noch umschaltbar)

Nur läßt sich einfach nicht alles nach diesem Schema nutzen und es wäre immer ein Mischmasch,
drum plane ich, die Interface-Version wieder rauszunehmen
und dafür alles durchweg komplett als mit Klassen zu machen.


Aktuell ist die Version mit Interfaces eh nicht so richtig nutzbar, aber könnte ja sein, daß wer darauf spekuliert hat, dieses später man nutzen zu können :angel2:

Satty67 31. Aug 2009 16:02

Re: himXML (gesprochen himix ML)
 
Also ich kann auf Interfaces verzichten, hab' lieber was in der Hand ;)

Aber mich darf man nicht als Maß nehmen, bin sowieso mehr rustikal eingestellt...

holliesoft 31. Aug 2009 19:24

Re: himXML (gesprochen himix ML)
 
Also auf die Interfaces kann auch ich verzichten.
Bin mit den Objekten zufrieden :-)

Bin sehr zufrieden mit himXML, würde gerne was spenden. Himitsu, hast Du ein Paypal Konto? Schreib doch evtl. eine kurze PM.

Gruß
Patrick

himitsu 31. Aug 2009 19:33

Re: himXML (gesprochen himix ML)
 
Zitat:

Zitat von holliesoft
Bin sehr zufrieden mit himXML, würde gerne was spenden. Himitsu, hast Du ein Paypal Konto?

ein Link steht ganz oben mit in den Dateiheadern (falls ich den nicht ausversehn kaputtgemacht hab, beim Versuch die neue Webseite zu basteln)
[edit] ok, der geht gleich wieder ... nur noch schnell die HTML neu hochladen ._.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr.
Seite 14 von 35   « Erste     4121314 151624     Letzte »    

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