Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Knoten (https://www.delphipraxis.net/63072-xml-knoten.html)

krys2000 13. Feb 2006 19:26


XML Knoten
 
Wenn die XML Datei so ist hier Beispiel:

Code:
<?xml version="1.0" standalone="yes" ?>
<movieorganizer>
 <movie>
  <id>0</id>
  <name>Krieg der Sternen</name>
  <format>DVD</format>
  <ton>DD5.1</ton>
  <anzmedien>5</anzmedien>
  <bildqualitaet>1+</bildqualitaet>
  <tonqualitaet>1</tonqualitaet>
  <gesamt>1+</gesamt>
  <verliehen />
  <comment>Fiction aber geile Film</comment>
  <sreenshot />
 </movie>
</movieorganizer>
dann kriege ich die Werte vom Knoten mit diese Procedur

Delphi-Quellcode:
procedure TForm1.UpdateList;
const
KNOTEN: array[0..8] of String = ('name', 'format', 'ton', 'anzmedien',
      'bildqualitaet', 'tonqualitaet', 'gesamt', 'verliehen', 'comment'); // siehe I
Var
movies : IXMLDOMNodeList; // Wird alle Filme (die Pakete) enthalten
subNode : IXMLDOMNode; // enthält eine Node
i, j: Integer; // Laufvariablem
Test: String;
begin
    Memo1.Lines.Clear;
   movies:=xmlDoc.documentElement.selectNodes('movie'); // siehe II
   for i:=0 to movies.length-1 do
      begin
     subNode:=movies.item[i].selectSingleNode('id'); // siehe III
      Memo1.Lines.Add(subNode.nodeName+'   ------>    '+subNode.text);
      Memo1.Lines.Add('');
         for j:=0 to length(KNOTEN)-1 do  // siehe V
                      begin
                     subNode:= movies.item[i].selectSingleNode(KNOTEN[j]);
                     if subNode<> nil Then  // siehe VI
                     begin
                      Memo1.Lines.Add(subNode.nodeName+'   ------>    '+subNode.text);
                      end
                     else
                     Memo1.Lines.Add('');
                  end; // ENDE for j:=0 to length(NAMES)-1 do
            // ENDE with MovieList.Items[i].SubItems do

       end; // ENDE for i:=0 to movies.length-1 do
end;
Ist sie aber so dargestellt

Code:
?xml version="1.0" standalone="yes"?>
<movieorganizer>
    <movie id="0" name="Krieg der Sternen" format="DVD" ton="DD5.1" anzmedien="5" bildqualitaet="1" tonqualitaet="1" gesamt="1" verliehen="" comment="Fiction aber geile Film" sreenshot=""/>
</movieorganizer>
Kriege ich die Werte vom Knoten mit diese Procedur nicht in Memo

Kann mir jemand ein TIP geben?
Ich bin XML Anfänger
Danke
Chris

[edit=alcaeus]Code-Tags eingefuegt. Mfg, alcaeus[/edit]

dahead 13. Feb 2006 19:42

Re: XML Knoten
 
Hallo,

tut mir leid dass ich keine lösung für dich habe, aber könntest du eventuell sämtlichen Delphi code mit den code tags [ delphi ] und [ /delphi] umschmücken (ohne leerzeichen). dann kann man erstens deinen code besser lesen, und zweitens fallen deine kommentare zum code an sich besser auf. danke! (die xml datei kannst du bspw. via [ quote ] und [ /quote ] besser darstellen).

marabu 13. Feb 2006 20:08

Re: XML Knoten
 
Hallo Chris,

im deinem zweiten Fall liegen die Informationen als Attributwerte vor:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i: Integer;
  nl: IXMLDOMNodeList;
  e: IXMLDOMElement;
begin
  nl := xmlDoc.documentElement.selectNodes('movie');
  for i := 0 to Pred(nl.length) do
  begin
    e := nl.item[i] as IXMLDOMElement;
    ShowMessage(VarToStr(e.getAttribute('name')));
  end;
end;
Grüße vom marabu

krys2000 13. Feb 2006 20:19

Re: XML Knoten
 
Zeigt mir die Pred(nl.length)=0
Delphi-Quellcode:
nl := xmlDoc.documentElement.selectNodes('movie');
  for i := 0 to Pred(nl.length) do

marabu 13. Feb 2006 21:26

Re: XML Knoten
 
Hallo Chris,

ich verstehe dich nicht. Mein Code zeigt dir, wie du auf einen Attributwert zugreifen kannst. Kannst du das Beispiel an deine Bedürfnisse anpassen? Wenn du nicht zurecht kommst, dann musst du dein Problem genau beschreiben, damit ich dir helfen kann.

marabu

krys2000 13. Feb 2006 21:42

Re: XML Knoten
 
Hallo Marabu!
Erst mal Danke schön!
Ich habe den Code angepast.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  nl: IXMLDOMNodeList;
  e: IXMLDOMElement;
begin
  nl := xmlDoc.documentElement.selectNodes('movie');
  for i := 0 to Pred(nl.length) do
  begin
    e := nl.item[i] as IXMLDOMElement;
    ShowMessage(VarToStr(e.getAttribute('id')));
  end;
end;
Da stimmt aber etwas nicht die Länge(nl.length) von nl=0 und die for schleife wird sofort beendet.
Grüsse
Chris

marabu 13. Feb 2006 21:53

Re: XML Knoten
 
Chris, wenn nl.Length 0 ist, dann gibt es keine movie-Elemente unterhalb des root-Elements. Schau dir vor der Schleife mal das XML Dokument an:

Delphi-Quellcode:
ShowMessage(xmlDoc.documentElement.xml);
Oder verwende mal selectNodes('//movie') um den Fehler einzukreisen.

marabu

krys2000 13. Feb 2006 22:59

Re: XML Knoten
 
Hallo Marabu!
Beim Parsen der Datei bekomme ich Fehlermeldung.
Ich erstelle neue Datei und dann melde ich mich
Grüsse
Chris

krys2000 14. Feb 2006 17:47

Re: XML Knoten
 
Hallo Marabu!
Meine Datei sieht jetzt so aus:
XML-Code:
<?xml version="1.0" standalone="yes"?>
<movieorganizer>
  <movie id="0" name="Krieg der Sternen" format="DVD" ton="DD5.1" anzmedien="5" bildqualitaet="1" tonqualitaet="1" gesamt="1" verliehen="Nein" comment="Fiction aber geile Film" sreenshot="">
    <darsteller haupt-darsteller="Henry Moore" neben-darsteller="Susane Miller"/>
  </movie>
  <movie id="1" name="Apoll0 5" format="DVD" ton="DD5.1" anzmedien="2" bildqualitaet="2" tonqualitaet="2" gesamt="2" verliehen="Ja" comment="Keine langweile" sreenshot="">
    <darsteller haupt-darsteller="Jorg Hansen" neben-darsteller="Stephanie Horn"/>
  </movie>
</movieorganizer>
Mit dem Code kann ich den Inhalt vom Knoten id und name auslesen
Delphi-Quellcode:
 nl := xmlDoc.documentElement.selectNodes('//movie');
  for i := 0 to Pred(nl.length) do
  begin
  FeldName:='';
    e := nl.item[i] as IXMLDOMElement;
    Test:=e.getAttribute('id');
    Memo2.Lines.Add(Test);
    Test:=e.getAttribute('name');
    Memo2.Lines.Add(FeldName+'   ------>    '+Test);
  end;
Wie komme ich jetzt auf den Unterknoten darsteller und seine Inhalte haupt-darsteller und neben-darsteller?
Danke für ein Tip

marabu 15. Feb 2006 08:22

Re: XML Knoten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen Chris,

die notwendigen Techniken um auf Elemente und deren Attribute zuzugreifen kennst du ja jetzt schon. Ich habe eine Demo erstellt, die das ganze etwas mehr im Zusammenhang zeigt. Vielleicht hilft dir das etwas weiter.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz