![]() |
XML; manipulieren ist ja kein Problem, aber ...
Moin,
also das manipulieren, bzw. das arbeiten mit .xml Dateien ist ja Dank XMLDocument gar nicht so schwer. Aber wie kann man denn eine .xml Datei zur Laufzeit erstellen?! Mit dem Befehl ...
Code:
... macht er es auf jeden Fall nicht. Wenn man erstmal eine .xml Datei hat, die auch schon ihren Anfang, á la <?xml version ......> besitzt, ist das hinzufügen von z.B. Knoten ja nicht mehr das Ding ...
Datamodule1.XMLDocument1.Create('C:\Datei.xml');
Weiß jemand Rat? Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Beim MS-XML-Parser geht´s recht einfach mit loadXML, der du den gewünschten (Anfangs-)XML-Code als String übergibst. Ich könnte mir vorstellen, dass XMLDocument etwas ähnliches anbietet. Sagt denn die Hilfe nichts darüber?
Create dient wohl eher dazu, eine Instanz des XML-Document-Objektes zu erzeugen. |
Re: XML; manipulieren ist ja kein Problem, aber ...
Zitat:
Beim XMLDocument, gibt es zwei Load* Methoden, die aber beide auf einen Fehler laufen, wenn man nicht vorhandene Dateien angibt... Grüsse, Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Hi,
du musst die Create-Methode verwenden mit dem AFileName. Ich vermute, dass dadurch die Datei auch erstellt wird. Wenn alle Fäden reißen kannst du auch eine einfache TextFile-Variable nehmen und dann dir das Grundgerüst per writeln erstellen. Allerdings sollte man das nur machen, wenn das mit deinem XMLDocument nicht geht. Btw MS XML halte ich für etwas einfacher bzw. logischer... :roll: ;) Chris |
Re: XML; manipulieren ist ja kein Problem, aber ...
Als DOMVendor benutze ich ja MSXML.
Aber es kann doch nicht so schwierig sein, eine XML Datei mit dem XMLDocument zu erstellen. Im I-Net bzw. im Delphi Handbuch (oder Delphi Hilfe) gibt es auch keine klaren Hinweise... Die Delphi Hilfe ist an der Stelle aber auch sehr(!) schwach. Es gibt für nix ein Beispiel! Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Warum sagst du das nicht gleich? IMHO bietet die XML-Komponente von Delphi6+ mehrere Möglichkeiten, von denen der Microsoft-Parser nur eine ist.
In dem Fall solltest du mal einen Blick in das PSDK werfen. Oder wenn dir das zu fett ist (~300meg Download), dann hole dir die aktuelle Version 4 SP2 von MS-XML. Ihr liegt die Doku auch bei. Da wirst du mit Sicherheit fündig, da du letztlich in Delphi "nur" die Typbibliothek von Microsoft benutzt. Und in dem Fall gilt, wie ich schon schrieb:
Delphi-Quellcode:
zum Anlegen einer neuen XML-Datei, die du dann mit
xmldoc := CoDOMDocument40.Create;
{ ... } xmldoc.loadXML('<Root><SubNode1><SubNode2/></SubNode1></Root>'); { ... }
Delphi-Quellcode:
speichern kannst. Das bezieht sich nun zwar vorrangig auf die schon angespochene Typbibliothek von Microsoft (s. auch Chakotays Tutorial), sollte aber mit der XML-Komponente ähnlich laufen.
xmldoc.save('Pfad\Dateiname.xml');
btw: lkz schrieb in AUQ, dass es bei XMLDocument von add heißt, und nicht loadXML. Dazu kann ich nichts sagen; höchstens: ausprobieren! Aber ich denke, eine Doku müsste doch eigenlich dabei sein (bei Delphi). Ist doch immerhin eine Standardkomponente ab Version 6. Oder? |
Re: XML; manipulieren ist ja kein Problem, aber ...
Zitat:
Als ich die Typenbibliothek msxml4.dll installieren wollte, sagte er mir, das sie bereit installiert ist, aber diese Datei die man, lt. dem Tutorial, einbinden soll, ist nicht vorhanden... Ich habe einfach nur die Komponente XMLDocument in mein DataModule eingebunden und verwende folgende Sachen in der USES Liste:
Code:
... na ja und natürlich noch diese ganzen anderen Standard Uses Dinger wie Windows, Messages n´ Stuff...
XMLDOM, XMLIntf, XMLDoc;
Aber ich kriege es nicht hin... Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Chakotay hat´s beschrieben:
|
Re: XML; manipulieren ist ja kein Problem, aber ...
Standardmäßig befindet sich die Unit dann im Lib-Verzeichnis.
Chris |
Re: XML; manipulieren ist ja kein Problem, aber ...
Ich habe das ganze jetzt mit dem XMLDocument, ohne Abstriche machen zu müssen, gelöst.
Zwar "betrüge" ich die .XML Datei etwas, weil ich den "Grundstein" per TextFile Bearbeitung lege und erst dann das XMLDocument einschalte, aber das stört mich wenig... :D Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Besser spät als nie ;-)
Delphi-Quellcode:
Das sollte gehen, um ein neues Dokument zu laden.
Datamodule1.XMLDocument1.Active := False;
Datamodule1.XMLDocument1.XML.Text := '<Root><SubNode1><SubNode2/></SubNode1></Root>'; Datamodule1.XMLDocument1.Active := True; ...:cat:.... |
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 |
Re: XML; manipulieren ist ja kein Problem, aber ...
Zitat:
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:
Code:
Und ganz wichtig, am ende IMMER
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;
Code:
sichern... sonst sieht man nüscht ...
DataModule1.XMLDocument1.SaveToFile(Datei)
Grüsse und ich hoffe das hilft Dir weiter, Ricane |
Re: XML; manipulieren ist ja kein Problem, aber ...
Hallo,
erstmal vielen vieln Dank fuer deine Hilfe! Zitat:
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 |
Re: XML; manipulieren ist ja kein Problem, aber ...
Zitat:
Zitat:
Zitat:
Code:
und so
<SubNode1></SubNode1>
Code:
geschlossen und gültig. Wenn du die XML-Datei im Code erstellst, dann gib den Tag in der von dir gewünschten Form an.
<SubNode1/>
Zitat:
Zitat:
|
Re: XML; manipulieren ist ja kein Problem, aber ...
Zitat:
Zitat:
Zitat:
Nochmals danke, das war sehr hilfreich Gruss lkz633 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz