XML Verarbeitung variabel machen
Hey,
ich habe vor einiger Zeit schonmal eine Frage gestellt, wie ich ein XML Dokument auslese. Nun habe ich nochmal eine erweiterte Frage: Mit diesem Code erhalte ich meine notwendigen Daten:
Delphi-Quellcode:
...aber durch die beiden for-Schleifen, bin ich auf folgende Struktur angewiesen:
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;
XML-Code:
Eine Struktur wie diese hier funktioniert da nicht:
<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>
XML-Code:
Wie kann ich meinen Code oben (den mit den for-Schleifen) variabel machen, dass ich auch andere Strukturen auslesen kann? Gibt doch Programme die zeigen das alles z.B. in einer TreeView an...die müssen sowas ja auch können.
<computer>
<computerdaten> <gehaeuse> <mainboard>Asus</mainboard> <cpu>Athlon X2 6000+</cpu> <ram>2 GB</ram> <festplatte>160 GB</festplatte> </gehaeuse> </computerdaten> <computerdaten> <gehaeuse> <mainboard>MSI</mainboard> <cpu>Intel QuadCore</cpu> <ram>4 GB</ram> <festplatte>500 GB</festplatte> </gehaeuse> </computerdaten> </computer> Ich hoffe mir kann jemand helfen. Danke. |
Re: XML Verarbeitung variabel machen
Ganz einfach, du musst das rekursiv programmieren.
Schreib eine Prozedur, die einen TreeNode und ein XMLElement als Parameter entgegennimmt.
Delphi-Quellcode:
PS: es gibt noch andere Möglichkeiten; wenn's noch aktuell ist, dann frag ruhig...
procedure ShowNode(parent:TTreeNode; element:XMLElement1);
var newnode : TTreeNode; begin // pseudocode - soll nur das Prinzip zeigen newnode := parent.AddChildNode(element.Name1); // Schleife über alle Attribute for i:=0 to element.AttributCount-1 do newnode.AddChildNode(element.Attribute[i].Name + '=' + element.Attribute[i].Value); // Schleife über alle Child-Elemente for i:=0 to element.ChildCount-1 do ShowNode(newnode, element.ChildNodes[i]); // der rekursive Aufruf end; |
Re: XML Verarbeitung variabel machen
Ich bringe XPath ins Spiel, weil man damit quasi in einem Rutsch die relevanten Knoten enthält und sich den rekursiven Ansatz komplett spart. Das ist der Vorteil. Der Nachteil ist, dass die XML-Datei komplett im Speicher hängt. Wenn sie nicht zu groß ist, dürfte das aber egal sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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