AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi XML; manipulieren ist ja kein Problem, aber ...
Thema durchsuchen
Ansicht
Themen-Optionen

XML; manipulieren ist ja kein Problem, aber ...

Ein Thema von Ricane · begonnen am 13. Aug 2003 · letzter Beitrag vom 15. Aug 2003
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#11

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

  Alt 14. Aug 2003, 15:18
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.

.......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#12

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

  Alt 14. Aug 2003, 18:01
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
  Mit Zitat antworten Zitat
Benutzerbild von Ricane
Ricane

Registriert seit: 21. Mär 2003
Ort: Quickborn
170 Beiträge
 
Delphi 7 Architect
 
#13

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

  Alt 15. Aug 2003, 08:28
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 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
Hendrik
So much to Code... so less Time....

www.RicaneSoftware.de
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#14

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

  Alt 15. Aug 2003, 08:57
Hallo,

erstmal vielen vieln Dank fuer deine Hilfe!

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 :

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
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#15

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

  Alt 15. Aug 2003, 10:23
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? )
  Mit Zitat antworten Zitat
lkz633

Registriert seit: 9. Jun 2002
Ort: Aachen
221 Beiträge
 
#16

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

  Alt 15. Aug 2003, 10:42
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

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 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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