![]() |
XML Dateien auslesen
Hi,
ich habe eine Memo mit folgendem (gekürzten) XML-Code:
XML-Code:
Wie kann ich z.B. über die Komponente JVSimpleXML diese Daten in eine ListView mit 3 Columns (Index, Key und Value) auslesen?
<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> 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! |
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:
nur als Beispiel, musst halt auf deine Bedürfnisse umbauen...
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; Gruß Ruben |
Re: XML Dateien auslesen
Okay, welche Unit muss ich denn für IXMLDocument und IXMLNode einbinden?
|
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...
![]() |
Re: XML Dateien auslesen
Zitat:
Delphi-Quellcode:
Gruß Ruben
uses XMLIntf, XMLDoc;
|
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... |
Re: XML Dateien auslesen
Zitat:
|
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:
Habe es schon über Attributes versucht, aber das klappt irgendwie nicht :-/
var xml : TXMLDocument;
begin xml:=TXMLDocument.Create(nil); xml.LoadFromFile(Edit1.Text); xml.Active:=True; ShowMessage(Xml.DocumentElement.ChildNodes['computer'].ChildNodes['computerdaten'].???); Kann mir jemand helfen? |
Re: XML Dateien auslesen
Delphi-Quellcode:
probier das mal, aber keine garantie, das habe ich eben nur hier rein geschrieben, ohne zu testen
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; Gruß Ruben |
Re: XML Dateien auslesen
Zitat:
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 02:43 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