AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi XML Verarbeitung variabel machen
Thema durchsuchen
Ansicht
Themen-Optionen

XML Verarbeitung variabel machen

Ein Thema von Yheeky · begonnen am 30. Apr 2008 · letzter Beitrag vom 12. Mai 2008
Antwort Antwort
Yheeky

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

XML Verarbeitung variabel machen

  Alt 30. Apr 2008, 09:09
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:
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='computerdatenthen begin
        for k:=0 to CdNode.ChildNodes.Count-1 do
        begin
          PNode:=CdNode.ChildNodes[k];
          if PNode.NodeName='mainboardthen ShowMessage(PNode.NodeValue); // deine Variable

        end;
      end;
    end;
  end;

end;
...aber durch die beiden for-Schleifen, bin ich auf folgende Struktur angewiesen:

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>
Eine Struktur wie diese hier funktioniert da nicht:
XML-Code:
<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>
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.

Ich hoffe mir kann jemand helfen.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: XML Verarbeitung variabel machen

  Alt 12. Mai 2008, 06:14
Ganz einfach, du musst das rekursiv programmieren.
Schreib eine Prozedur, die einen TreeNode und ein XMLElement als Parameter entgegennimmt.
Delphi-Quellcode:
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;
PS: es gibt noch andere Möglichkeiten; wenn's noch aktuell ist, dann frag ruhig...
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: XML Verarbeitung variabel machen

  Alt 12. Mai 2008, 08:44
Ich bringe Hier im Forum suchenXPath 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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:28 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