Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XML; manipulieren ist ja kein Problem, aber ... (https://www.delphipraxis.net/7489-xml%3B-manipulieren-ist-ja-kein-problem-aber.html)

sakura 14. Aug 2003 14:18

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Besser spät als nie ;-)
Delphi-Quellcode:
  Datamodule1.XMLDocument1.Active := False;
  Datamodule1.XMLDocument1.XML.Text := '<Root><SubNode1><SubNode2/></SubNode1></Root>';
  Datamodule1.XMLDocument1.Active := True;
Das sollte gehen, um ein neues Dokument zu laden.

...:cat:....

lkz633 14. Aug 2003 17:01

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Die gleichen Probleme habe ich gerade auch.

Es muss doch irgendwie moeglich sein, mit createelement und addchild dies hinzubekommen.

Ausserdem moechte ich z.B eine bestehende Datei laden und dann Knoten hinzufuegen.

Weiss niemand wie dies mit XMLDocument geht?

Gruss lkz633

Ricane 15. Aug 2003 07:28

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Zitat:

Zitat von lkz633
Es muss doch irgendwie moeglich sein, mit createelement und addchild dies hinzubekommen.

Dieser Fetzten Code, macht genau das. Er erstellt im ersten "Block" das Grundgerüst für eine XML Datei (3+4 Zeile). Dann wird der erste Knoten (KnotenEins) erstellt, der bei mir den Tabellennamen gekriegt hat (cbTabellen.Text). Außerdem bekommt er als Attribut noch den Servernamen, der in der String Variable "Server" liegt.

Dann werden alle Inhalte der Tabelle per For Schleife, in die Datei geschrieben. UnterKnoten wird jeweils der Name von der akt. Spalte zugewiesen, und der Spalteeintrag ist dann natürlich der Text aus dem Feld. Nach jeder Reihe muss der erste Knoten (KnotenEins) wieder geschloßen werden, weil es sonst einen Anzeigefehler gibt.

Code:
  Datamodule1.XMLDocument1.Active := False;

  DataModule1.XMLDocument1.XML.Text := '';
  Datamodule1.XMLDocument1.XML.Text := '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>';
  Datamodule1.XMLDocument1.XML.Text := Datamodule1.XMLDocument1.XML.Text + '<Tabellen-Abbild></Tabellen-Abbild>';
  Datamodule1.XMLDocument1.Active := True;

  KnotenEins := DataModule1.XMLDocument1.DocumentElement.AddChild(cbTabellen.Text);
  KnotenEins.Attributes['Server'] := Server;

  For X := 1 To DataModule1.ADODataSet1.RecordCount - 1 Do
  Begin
    For I := 0 To grdHaupt.Columns.Count - 1 Do
    Begin
      DataModule1.ADODataSet1.RecNo := X;
      UnterKnoten := KnotenEins.AddChild(grdHaupt.Fields[I].FieldName);
      UnterKnoten.Text := grdHaupt.Fields[I].Text;
    End;
    KnotenEins := DataModule1.XMLDocument1.DocumentElement.AddChild(cbTabellen.Text)
  End;
Zitat:

Zitat von lkz633
Ausserdem moechte ich z.B eine bestehende Datei laden und dann Knoten hinzufuegen.

Code:
var
    NewStock: IXMLNode;
    ValueNode: IXMLNode;
Begin

  DataModule1.XMLDocument1.FileName := Datei;
  NewStock :=  DataModule1.XMLDocument1.FileName := Datei.DocumentElement.AddChild('stock');
  NewStock.Attributes['exchange'] := 'NASDAQ';
  ValueNode := NewStock.AddChild('name');
  ValueNode.Text := 'Cisco Systems'
  ValueNode := NewStock.AddChild('price');
  ValueNode.Text := '62.375';
  ValueNode := NewStock.AddChild('symbol');
  ValueNode.Text := 'CSCO';
  ValueNode := NewStock.AddChild('shares');

  ValueNode.Text := '25';
End;
Und ganz wichtig, am ende IMMER

Code:
  DataModule1.XMLDocument1.SaveToFile(Datei)
sichern... sonst sieht man nüscht ...

Grüsse und ich hoffe das hilft Dir weiter,

Ricane

lkz633 15. Aug 2003 07:57

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Hallo,

erstmal vielen vieln Dank fuer deine Hilfe!

Zitat:

Zitat von Ricane
[code]
Datamodule1.XMLDocument1.XML.Text := '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>';
Datamodule1.XMLDocument1.XML.Text := Datamodule1.XMLDocument1.XML.Text + '<Tabellen-Abbild></Tabellen-Abbild>';

Ich glaube da hast du dich selber ver.... Du loescht den Text wieder, ein "xml version..." wird dann bei mir automatisch eingefuegt. Es muesste xml.add heissen :-)

Habe noch ein paar Fragen, weiter werden folgen :D :

1) Wann genau werden Tags automatisch geschlossen? Addchild hat bei mir nur den schliessenden Tag erzeugt, den oeffnenden nur, wenn ich auch einen Unterknoten erstellt habe. Was mache ich, wenn ich keine Unterknoten habe, aber den Tag brauche, um z.B eine gewisse Vorgabe zu erfuellen

2) Kann das DocumentElement nur mit XML.add erstellt werden?

3) Wofuer ist createelement da, wenn ich es gar nicht brauche? Was macht es?

4) Wenn ich die Datei jetzt oeffne, steht alles in einer Zeile. Kann ich es irgednwie so hinbekommen, dass wenn ich die Datei in einem XML Editor anscchaue, die Datei auch so formatiert ist wie eine XML Datei, also mit einruecken usw?

5) Gibt es eine Moeglichkeit, Kommentare einzufuegen, oder geht dies nur mit Writeln


Nochmals vielen Dank

lkz633

MathiasSimmack 15. Aug 2003 09:23

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Zitat:

Zitat von lkz633
Ich glaube da hast du dich selber ver.... Du loescht den Text wieder, ein "xml version..." wird dann bei mir automatisch eingefuegt. Es muesste xml.add heissen :-)

Auch auf die Gefahr hin, dich missverstanden zu haben, aber da wird nichts gelöscht, oder ist dir das Plus entgangen?
Zitat:

Code:
Datamodule1.XMLDocument1.XML.Text := '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>';
Datamodule1.XMLDocument1.XML.Text := [b]Datamodule1.XMLDocument1.XML.Text +[/b]
  '<Tabellen-Abbild></Tabellen-Abbild>';

Zitat:

1) Wann genau werden Tags automatisch geschlossen? Addchild hat bei mir nur den schliessenden Tag erzeugt, den oeffnenden nur, wenn ich auch einen Unterknoten erstellt habe. Was mache ich, wenn ich keine Unterknoten habe, aber den Tag brauche, um z.B eine gewisse Vorgabe zu erfuellen
Jeder XML-Parser erzeugt (hoffentlich!) "well-formed" Dokumente. Ein Knoten ist so
Code:
<SubNode1></SubNode1>
und so
Code:
<SubNode1/>
geschlossen und gültig. Wenn du die XML-Datei im Code erstellst, dann gib den Tag in der von dir gewünschten Form an.

Zitat:

4) Wenn ich die Datei jetzt oeffne, steht alles in einer Zeile. Kann ich es irgednwie so hinbekommen, dass wenn ich die Datei in einem XML Editor anscchaue, die Datei auch so formatiert ist wie eine XML Datei, also mit einruecken usw?
Da gibt es sicher eine passende Eigenschaft. Bei MS-XML heißt sie (glaube ich) "preservedWhiteSpace". (@sakura?)

Zitat:

5) Gibt es eine Moeglichkeit, Kommentare einzufuegen, oder geht dies nur mit Writeln
Igitt! Ein Kommentar ist auch ein XML-Element, und es sollte sich mit einer entsprechenden Funktion auch einer erzeugen lassen! (wie gehabt: @sakura? :wink:)

lkz633 15. Aug 2003 09:42

Re: XML; manipulieren ist ja kein Problem, aber ...
 
Zitat:

Zitat von MathiasSimmack
Auch auf die Gefahr hin, dich missverstanden zu haben, aber da wird nichts gelöscht, oder ist dir das Plus entgangen?

Oops :oops:

Zitat:

Zitat von MathiasSimmack
Jeder XML-Parser erzeugt (hoffentlich!) "well-formed" Dokumente. Ein Knoten ist so
Code:
<SubNode1></SubNode1>
und so
Code:
<SubNode1/>
geschlossen und gültig.

Danke! Das sehe ich erst jetzt, dass der Slash bei diesen Knoten hinten steht. Super, wieder was gelernt.

Zitat:

Zitat von lkz633
so formatiert ist wie eine XML Datei, also mit einruecken usw?

Des Raetsels Loesung war xml.Options:= [doNodeAutoIndent] ;

Nochmals danke, das war sehr hilfreich

Gruss lkz633


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.
Seite 2 von 2     12   

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