![]() |
Re: XML Dateien auslesen
Ok, aber auch mit ChildNodes habe ich es nicht hinbekommen :-(
@Centrii: Bekomme nun eine Fehlermeldung: Zitat:
|
Re: XML Dateien auslesen
hier musst du dein XML zuweisen.
Delphi-Quellcode:
z.B.
XML.XML.Text:=XMLCode;
Delphi-Quellcode:
XML.XML.Text := memo1.lines.text;
|
Re: XML Dateien auslesen
Fehlermeldung bleibt leider bestehen.
Hier mal meine komplette Unit:
Delphi-Quellcode:
In Memo1 steht:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XMLIntf, XMLDoc; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var xml : TXMLDocument; CNode : IXMLNode; CdNode : IXMLNode; PNode : IXMLNode; i,j,k : Integer; begin XML := TXMLDocument.Create(nil); XML.XML.Text := Memo1.Lines.Text; XML.Options := [doNodeAutoCreate,doAutoSave]; XML.Active:=true; for i:=0 to XML.ChildNodes.Count-1 do begin for j:=0 to XML.ChildNodes[i].ChildNodes.Count-1 do begin CdNode:=XML.ChildNodes[i].ChildNodes[j]; if CdNode.NodeName='computerdaten' then begin for k:=0 to CdNode.ChildNodes.Count-1 do begin PNode:=CdNode.ChildNodes[k]; if PNode.NodeName='mainboard' then ShowMessage(PNode.NodeValue); // deine Variable end; end; end; end; end; end.
XML-Code:
<computer>
<computerdaten> <mainboard>Asus</mainboard> <cpu>Athlon X2 6000+</cpu> <ram>2 GB</ram> <festplatte>160 GB</festplatte> </computerdaten> <computerdaten> <mainboard>MSI</mainboard> <cpu>Intel QuadCore</cpu> <ram>4 GB</ram> <festplatte>500 GB</festplatte> </computerdaten> </computer> |
Re: XML Dateien auslesen
es ist ein
Delphi-Quellcode:
und dann mach kein
var XML : IXMLDocument;
Delphi-Quellcode:
sondern ein
XML := TXMLDocument.Create(nil);
Delphi-Quellcode:
Gruß Ruben
XML:=NewXMLDocument;
|
Re: XML Dateien auslesen
Okay, super, nun funktioniert [/delphi]das schonmal.
Mir fehlt´s nun nur noch an der Ausgabe. Ich habe bisher folgendes:
Delphi-Quellcode:
Von dem Schleifendurchlauf (2 mal) funktioniert es schonmal, aber ich bekomme immer nur den ersten Satz von Computerteilen angezeigt :-/
var i, j : integer;
begin // Werte zählen for i := 0 to myFirstXML.DocumentElement.ChildNodes.Count - 1 do for j := 0 to myFirstXML.DocumentElement.ChildNodes['computerdaten'].ChildNodes.Count -1 do // ... |
Re: XML Dateien auslesen
du musst natürlich alle Childs durchlaufen, in deiner Unit hast du auch nur "MAinboard" abgefragt, deshalb bekommst du nur den ersten Satz, das gleich musst du jetzt für die anderen Childs auch machen.
Hab ich unter #9 schon angedeuted.... |
Re: XML Dateien auslesen
Nee, also hier frage ich ja den kompletten Tag ab:
Delphi-Quellcode:
Ich bekomme ja auch die Werte für Mainboard, CPU, Ram und Festplatte geliefert, doch beim ersten ist es ein ASUS Mainboard beim zweiten ein MSI...er zeigt mir aber bei beiden Durchläufen ASUS an.
var i, j : integer;
begin // Werte zählen for i := 0 to myFirstXML.DocumentElement.ChildNodes.Count - 1 do for j := 0 to myFirstXML.DocumentElement.ChildNodes['computerdaten'].ChildNodes.Count -1 do // ... Ich muss auch irgendwie i und j verwenden, aber ich hab´s noch zu keiner funktionierenden Lösung gebracht. Du oder jemand anderes eine Idee? |
Re: XML Dateien auslesen
mach aus deinem Progrämmchen ein .zip, dann kann man sich das mal anschauen....
|
Re: XML Dateien auslesen
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, dank' dir.
Hab die exe mal mit reingepackt. |
Re: XML Dateien auslesen
Habs! War doch recht einfach:
Delphi-Quellcode:
Danke trotzdem für die Mühe!
ShowMessage(myFirstXML.DocumentElement.ChildNodes[i].ChildNodes[j].Text);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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