Delphi-PRAXiS
Seite 1 von 3  1 23      

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 15. Apr 2008 22:49


XML Dateien auslesen
 
Hi,

ich habe eine Memo mit folgendem (gekürzten) XML-Code:

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>
Wie kann ich z.B. über die Komponente JVSimpleXML diese Daten in eine ListView mit 3 Columns (Index, Key und Value) auslesen?
Habe es nur geschafft, die beiden tags "computerdaten" auszulesen.

Wäre super, wenn mir jemand helfen könnte. Gerne auch mit ne anderen Verarbeitungsmöglichkeit als über die Komponente JVSimpleXML.

Danke!

Centrii 16. Apr 2008 07:54

Re: XML Dateien auslesen
 
Hallo Christian,

das JvSimpleXML kenne ich nicht, aber du musst deine Childs durchgehen und dann die Attribute, bzw. Values abfragen.

Beispiel:
Delphi-Quellcode:
var XML                      : IXMLDocument;
    mNode                    : IXMLNode;
    eNode                    : IXMLNode;
    opNode                   : IXMLNode;
    arNode                   : IXMLNode;
    dNode                    : IXMLNode;
    sNode                    : IXMLNode;
    i,j,k,m,n,o,p            : Integer;
begin
  XML:=NewXMLDocument;
  XML.XML.Text:=XMLCode;
  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
      eNode:=XML.ChildNodes[i].ChildNodes[j];
      if eNode.NodeName='equipment' then begin
        for k:=0 to eNode.ChildNodes.Count-1 do
        begin
          if eNode.ChildNodes[k].NodeName='elements' then
          begin
            for m:=0 to eNode.ChildNodes[k].ChildNodes.count-1 do
            begin
              mNode:=eNode.ChildNodes[k].ChildNodes[m];
              for n:=0 to mNode.ChildNodes.count-1 do
              begin
                if mNode.ChildNodes[n].NodeName='subsystem' then
                begin
                  for o:=0 to mNode.ChildNodes[n].ChildNodes.Count-1 do
                  begin
                    dNode:=mNode.ChildNodes[n].ChildNodes[o];
                    for p:=0 to dNode.ChildNodes.Count-1 do
                    begin
                      sNode:=dNode.ChildNodes[p];
                      if sNode.Attributes['areasigtype'] = '12' then
                      begin
                        if ((sNode.Attributes['signalcode'] = 'X') and (sNode.Attributes['replacetag'] = '')) then
                        begin

                        end;
                      end;
                    end;
                  end;
                end;
              end;
            end;
          end;
        end;
      end;
    end;
  end;
end;
nur als Beispiel, musst halt auf deine Bedürfnisse umbauen...

Gruß Ruben

Yheeky 16. Apr 2008 10:37

Re: XML Dateien auslesen
 
Okay, welche Unit muss ich denn für IXMLDocument und IXMLNode einbinden?

moonwhaler 16. Apr 2008 10:45

Re: XML Dateien auslesen
 
Ein kleiner Tipp von mir: Versuch es mal mit der OmniXML Komponente. Dies ist recht leichtgewichtig und einfach anzuwenden - zudem Syntaxkompatibel zur MSXML. Sind einige Beispiele dabei, die eigentlich selbsterklärend sind...

http://www.omnixml.com/

Centrii 16. Apr 2008 10:49

Re: XML Dateien auslesen
 
Zitat:

Zitat von Yheeky
Okay, welche Unit muss ich denn für IXMLDocument und IXMLNode einbinden?

Delphi-Quellcode:
uses XMLIntf, XMLDoc;
Gruß Ruben

angelika81 16. Apr 2008 11:36

Re: XML Dateien auslesen
 
@Centrii

Ich denke, man kann diese Abfrage auch mit XPATH formulieren, dann brauchst du doch nicht so viele verschachtelte Bedingungen zu formulieren...

Centrii 16. Apr 2008 12:09

Re: XML Dateien auslesen
 
Zitat:

Zitat von angelika81
@Centrii

Ich denke, man kann diese Abfrage auch mit XPATH formulieren, dann brauchst du doch nicht so viele verschachtelte Bedingungen zu formulieren...

mag sein, hab ich noch nicht ausprobiert, ich bin bis jetzt mit meiner Methode ganz gut gefahren :wink:

Yheeky 16. Apr 2008 12:27

Re: XML Dateien auslesen
 
Okay, danke für den Tipp mit IXMLDocument und Co.

Ich habe bei folgendem Code allerdings noch das Problem, dass ich nicht auf die einzelnen Attribute komme.

Delphi-Quellcode:
var xml : TXMLDocument;
begin
  xml:=TXMLDocument.Create(nil);
  xml.LoadFromFile(Edit1.Text);
  xml.Active:=True;

  ShowMessage(Xml.DocumentElement.ChildNodes['computer'].ChildNodes['computerdaten'].???);
Habe es schon über Attributes versucht, aber das klappt irgendwie nicht :-/
Kann mir jemand helfen?

Centrii 16. Apr 2008 12:54

Re: XML Dateien auslesen
 
Delphi-Quellcode:
var XML                      : IXMLDocument;
    CNode                    : IXMLNode;
    CdNode                   : IXMLNode;
    PNode                    : IXMLNode;
    i,j,k,m,n,o,p            : Integer;
begin
  XML:=NewXMLDocument;
  XML.XML.Text:=XMLCode;
  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='mainbord' then Variable := PNode.NodeValue;  // deine Variable
          else if PNode.NodeName='cpu' then Variable := PNode.NodeValue;  // deine Variable
           .
           .
           .
           .
        end;
      end;
    end;
  end;
end;
probier das mal, aber keine garantie, das habe ich eben nur hier rein geschrieben, ohne zu testen

Gruß Ruben

shmia 16. Apr 2008 13:02

Re: XML Dateien auslesen
 
Zitat:

Zitat von Yheeky
Habe es schon über Attributes versucht, aber das klappt irgendwie nicht :-/

Die XML Beispieldaten enthalten keine Attribute!
Das ist ein Element: <Computer>blabla</Computer>
In folgendem Element ist ein Attribut namens SerialNo enthalten: <Computer SerialNo="35345" />


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.
Seite 1 von 3  1 23      

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