AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML Dateien auslesen

Ein Thema von Yheeky · begonnen am 15. Apr 2008 · letzter Beitrag vom 17. Apr 2008
Antwort Antwort
Seite 1 von 3  1 23      
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

XML Dateien auslesen

  Alt 15. Apr 2008, 22:49
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!
  Mit Zitat antworten Zitat
Centrii

Registriert seit: 18. Mai 2007
Ort: FDS
108 Beiträge
 
Delphi 2006 Architect
 
#2

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 07:54
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='equipmentthen begin
        for k:=0 to eNode.ChildNodes.Count-1 do
        begin
          if eNode.ChildNodes[k].NodeName='elementsthen
          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='subsystemthen
                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'] = '12then
                      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
Ruben
Theorie ist, wenn man alles weiss, aber nichts funktioniert. Praxis ist, wenn alles funktioniert und keiner weiss warum
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 10:37
Okay, welche Unit muss ich denn für IXMLDocument und IXMLNode einbinden?
  Mit Zitat antworten Zitat
moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 10:45
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/
  Mit Zitat antworten Zitat
Centrii

Registriert seit: 18. Mai 2007
Ort: FDS
108 Beiträge
 
Delphi 2006 Architect
 
#5

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 10:49
Zitat von Yheeky:
Okay, welche Unit muss ich denn für IXMLDocument und IXMLNode einbinden?
uses XMLIntf, XMLDoc; Gruß Ruben
Ruben
Theorie ist, wenn man alles weiss, aber nichts funktioniert. Praxis ist, wenn alles funktioniert und keiner weiss warum
  Mit Zitat antworten Zitat
angelika81

Registriert seit: 8. Apr 2008
12 Beiträge
 
Delphi 2007 Professional
 
#6

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 11:36
@Centrii

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

Registriert seit: 18. Mai 2007
Ort: FDS
108 Beiträge
 
Delphi 2006 Architect
 
#7

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 12:09
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
Ruben
Theorie ist, wenn man alles weiss, aber nichts funktioniert. Praxis ist, wenn alles funktioniert und keiner weiss warum
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#8

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 12:27
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?
  Mit Zitat antworten Zitat
Centrii

Registriert seit: 18. Mai 2007
Ort: FDS
108 Beiträge
 
Delphi 2006 Architect
 
#9

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 12:54
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='computerdatenthen begin
        for k:=0 to CdNode.ChildNodes.Count-1 do
        begin
          PNode:=CdNode.ChildNodes[k];
          if PNode.NodeName='mainbordthen Variable := PNode.NodeValue; // deine Variable
          else if PNode.NodeName='cputhen 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
Ruben
Theorie ist, wenn man alles weiss, aber nichts funktioniert. Praxis ist, wenn alles funktioniert und keiner weiss warum
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: XML Dateien auslesen

  Alt 16. Apr 2008, 13:02
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" />
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:21 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