Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi XML Dateien auslesen (https://www.delphipraxis.net/112149-xml-dateien-auslesen.html)

Yheeky 16. Apr 2008 13:17

Re: XML Dateien auslesen
 
Ok, aber auch mit ChildNodes habe ich es nicht hinbekommen :-(

@Centrii: Bekomme nun eine Fehlermeldung:
Zitat:

Kein aktives Dokument.

Centrii 16. Apr 2008 13:22

Re: XML Dateien auslesen
 
hier musst du dein XML zuweisen.

Delphi-Quellcode:
XML.XML.Text:=XMLCode;
z.B.

Delphi-Quellcode:
XML.XML.Text := memo1.lines.text;

Yheeky 16. Apr 2008 13:36

Re: XML Dateien auslesen
 
Fehlermeldung bleibt leider bestehen.

Hier mal meine komplette Unit:

Delphi-Quellcode:
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.
In Memo1 steht:

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>

Centrii 16. Apr 2008 13:42

Re: XML Dateien auslesen
 
es ist ein
Delphi-Quellcode:
var XML : IXMLDocument;
und dann mach kein

Delphi-Quellcode:
XML := TXMLDocument.Create(nil);
sondern ein

Delphi-Quellcode:
XML:=NewXMLDocument;
Gruß Ruben

Yheeky 16. Apr 2008 13:59

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:
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
// ...
Von dem Schleifendurchlauf (2 mal) funktioniert es schonmal, aber ich bekomme immer nur den ersten Satz von Computerteilen angezeigt :-/

Centrii 16. Apr 2008 14:08

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....

Yheeky 16. Apr 2008 14:22

Re: XML Dateien auslesen
 
Nee, also hier frage ich ja den kompletten Tag ab:

Delphi-Quellcode:
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 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.
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?

Centrii 16. Apr 2008 14:25

Re: XML Dateien auslesen
 
mach aus deinem Progrämmchen ein .zip, dann kann man sich das mal anschauen....

Yheeky 16. Apr 2008 14:31

Re: XML Dateien auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, dank' dir.

Hab die exe mal mit reingepackt.

Yheeky 16. Apr 2008 14:59

Re: XML Dateien auslesen
 
Habs! War doch recht einfach:

Delphi-Quellcode:
ShowMessage(myFirstXML.DocumentElement.ChildNodes[i].ChildNodes[j].Text);
Danke trotzdem für die Mühe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 Uhr.
Seite 2 von 3     12 3      

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