Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi [XMLLib] - Strucktur erstellen (https://www.delphipraxis.net/121171-%5Bxmllib%5D-strucktur-erstellen.html)

remo.mueller 23. Sep 2008 13:55


[XMLLib] - Strucktur erstellen
 
Guten Tag,

ich möchte folgende Struktur in XML erzeugen und speichern.
Ich verwende "XMLLib" von Muetze1.

Delphi-Quellcode:
<filter>
  <rule id="1" points="1,0" command="+Message-ID" regex="\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@" info="Dotted IP in Message-ID" result=""/>      
</filter>
Irgendwie habe ich einen kleinen Denkknoten und komme nicht auf die Lösung. :gruebel:
Vielleicht könnte man mir mit einen Beispielcode helfen.


Besten Dank im Vorraus. :zwinker:
Remo

Roachford 23. Sep 2008 14:31

Re: [XMLLib] - Strucktur erstellen
 
Na, die habe ich doch noch vom letzten Problem rumliegen. Du weisst schon, dass der Author diese nicht mehr weiter pflegt?

Delphi-Quellcode:
function CreateXML(const AFilename: string): boolean;
var
  lLib: TXMLLib;
  lNode: TXMLNode;
begin
  lLib := TXMLLib.Create;
  try
    if lLib.CreatePathAndNode('filter/rule', lNode) then
    begin
      lNode.Attributes.SimpleAdd('id', '1');
      lNode.Attributes.SimpleAdd('points', '1,0');
      lNode.Attributes.SimpleAdd('command', '+Message-ID');
      lNode.Attributes.SimpleAdd('regex', '\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@');
      lNode.Attributes.SimpleAdd('info', 'Dotted IP in Message-ID');
      lNode.Attributes.SimpleAdd('result', '');
    end;

    result := lLib.SaveToFile(AFilename);
  finally
    lLib.Free;
  end;
end;

remo.mueller 23. Sep 2008 15:31

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von Roachford
Na, die habe ich doch noch vom letzten Problem rumliegen.
Du weisst schon, dass der Author diese nicht mehr weiter pflegt?

Danke ... das war schnell.
Ich habe schon überlegt auf "Chilkat XML" umzusteigen - ein ActiveX-Element.
Aber ich bin selbst kein Fan von ActiveX.

Übrigens wie kann ich in dieser Struktur noch ein oder mehrere Einträge vom Typ:
<rule id="1" points="1,0" command="+Message-ID" regex="\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@" info="Dotted IP in Message-ID" result=""/> hinzufügen? :?:

Mit besten Grüßen
Remo

Mackhack 23. Sep 2008 15:50

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von Roachford
Na, die habe ich doch noch vom letzten Problem rumliegen. Du weisst schon, dass der Author diese nicht mehr weiter pflegt?

Das heisst jetzt aber hoffentlich nicht dass die Lib schlechter ist als andere nur weil Muetze1 da nichts mehr machen will. Wenn du mal auf seinem Blog liest warum er nicht weitermacht sollte das doch zufriedenstellend sein!

Roachford 23. Sep 2008 16:36

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von remo.mueller
Übrigens wie kann ich in dieser Struktur noch ein oder mehrere Einträge vom Typ:
<rule id="1" points="1,0" command="+Message-ID" regex="\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@" info="Dotted IP in Message-ID" result=""/> hinzufügen? :?:

Ich habe ebend nochmal ein wenig rumprobiert und du kannst einfach Knoten erstellen und brauchst diese nicht mehr anzufügen, das macht die Lib selbst abhängig vom übergebenen Parent-Knoten. Wenn der Parent nil ist, also der Hauptknoten, den musst du als einziges der Root Eigenschaft der Lib zuweisen.

Also somit wäre es so möglich:
Delphi-Quellcode:
function CreateXML(const AFilename: string): boolean;
var
  lLib: TXMLLib;
  lNode: TXMLNode;
begin
  lLib := TXMLLib.Create;
  try
    lNode := TXMLNode.Create;
    lNode.Name := 'filter';

      // Root Knoten muss zugewiesen werden
    lLib.Root := lNode;


      // für deine weiteren Einträge dann:
    lNode := TXMLNode.Create(lLib.Root);
    lNode.Name := 'rule';
    lNode.Attributes.SimpleAdd('id', '1');
    lNode.Attributes.SimpleAdd('points', '1,0');
    lNode.Attributes.SimpleAdd('command', '+Message-ID');
    lNode.Attributes.SimpleAdd('regex', '\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@');
    lNode.Attributes.SimpleAdd('info', 'Dotted IP in Message-ID');
    lNode.Attributes.SimpleAdd('result', '');

      // noch einer ...
    lNode := TXMLNode.Create(lLib.Root);
    lNode.Name := 'rule';
    lNode.Attributes.SimpleAdd('id', '1');
    lNode.Attributes.SimpleAdd('points', '1,0');
    lNode.Attributes.SimpleAdd('command', '+Message-ID');
    lNode.Attributes.SimpleAdd('regex', '\.\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\@');
    lNode.Attributes.SimpleAdd('info', 'Dotted IP in Message-ID');
    lNode.Attributes.SimpleAdd('result', '');

      // etc...

    result := lLib.SaveToFile(AFilename);
  finally
    lLib.Free;
  end;
end;
Zitat:

Zitat von Mackhack
Das heisst jetzt aber hoffentlich nicht dass die Lib schlechter ist als andere nur weil Muetze1 da nichts mehr machen will. Wenn du mal auf seinem Blog liest warum er nicht weitermacht sollte das doch zufriedenstellend sein!

Ich habe nie behauptet das sie schlecht(er) ist, ich wollte ihn nur darauf hinweisen. Wenn er ein Projekt erstellt will man auch die Gewissheit in einiger Zeit das Projekt erstellen zu können. Und es ist nicht bei jedem Projekt gut auf etwas ohne Zukunft zu setzen. Vielleicht braucht er in einiger Zeit mal ein Feature was er jetzt noch vermisst und spätestens dann muss er wahrscheinlich einen Großteil seines Codes anpassen wegen Wechsel der XML Zugriffskomponenten.

Und ich habe mich in die Lib recht schnell reingefunden. Es gibt so manche Dinge die nicht stimmig sind (Nodes.Nodes[], etc. anstatt besser Nodes.Items[], Anscheinend keine UTF-16 Support), aber trotz alledem kam ich schnell damit zu Recht ohne gross was zu lesen, etc. Von daher wollte ich hier nichts schlecht machen, weil sonst hätte ich die Frage einfach stehen gelassen oder hätte gleich was mit OmniXML oder MSXML gepostet...

Also mal ganz ruhig...

remo.mueller 24. Sep 2008 17:10

Re: [XMLLib] - Strucktur erstellen
 
Also besten Dank für den Quellcode. :thumb:
Der XML-Test hat mir gezeigt, daß eine Datenbank schneller ist.
Und bei meinen Spamfilter merkt man den Unterschied.


Mit besten Grüßen
Remo

Roachford 24. Sep 2008 17:47

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von remo.mueller
Der XML-Test hat mir gezeigt, daß eine Datenbank schneller ist.

Wie? Du willst eine unprofessionelle XML Library gegen Datenbank antreten lassen? Dann kannste gleich ein Bobbycar gegen einen Merci vergleichen. Es gibt genug professionelle XML Datenbanksysteme, diese solltest du zum Test heranziehen. Die Library ist nichtmal ansatzweise dazu ausgelegt als Datenbank verwendet zu werden. Sie hat keine Optimierungen (z.B. Hashwerte) beim Knotensuchen noch ist die Verwaltung der Knoten allgemein optimiert geschweige denn auf Geschwindigkeit ausgelegt.

Der.Kaktus 24. Sep 2008 17:51

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von Roachford
Zitat:

Zitat von remo.mueller
Der XML-Test hat mir gezeigt, daß eine Datenbank schneller ist.

Wie? Du willst eine unprofessionelle XML Library gegen Datenbank antreten lassen? Dann kannste gleich ein Bobbycar gegen einen Merci vergleichen. Es gibt genug professionelle XML Datenbanksysteme, diese solltest du zum Test heranziehen. Die Library ist nichtmal ansatzweise dazu ausgelegt als Datenbank verwendet zu werden. Sie hat keine Optimierungen (z.B. Hashwerte) beim Knotensuchen noch ist die Verwaltung der Knoten allgemein optimiert geschweige denn auf Geschwindigkeit ausgelegt.

Hi,

bescheidene Frage..was soll mir XML fuer Vorteile bringen? :gruebel: ..ich habe geringe Datenmengen.."Memtable"..habe groessere Datenmengen..strukturierte SQL DB..was brauch ich XML?

Roachford 24. Sep 2008 22:14

Re: [XMLLib] - Strucktur erstellen
 
Zitat:

Zitat von Der.Kaktus
bescheidene Frage..was soll mir XML fuer Vorteile bringen? :gruebel: ..ich habe geringe Datenmengen.."Memtable"..habe groessere Datenmengen..strukturierte SQL DB..was brauch ich XML?

Und was fragst du das mich? Ich habe mir das nicht ausgedacht mit Datenbanken auf XML Basis, noch propagandiere ich dies hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.

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