AGB  ·  Datenschutz  ·  Impressum  







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

XML Knoten

Ein Thema von krys2000 · begonnen am 13. Feb 2006 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#1

XML Knoten

  Alt 13. Feb 2006, 19:26
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]
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: XML Knoten

  Alt 13. Feb 2006, 19:42
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).
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: XML Knoten

  Alt 13. Feb 2006, 20:08
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
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#4

Re: XML Knoten

  Alt 13. Feb 2006, 20:19
Zeigt mir die Pred(nl.length)=0
Delphi-Quellcode:
nl := xmlDoc.documentElement.selectNodes('movie');
  for i := 0 to Pred(nl.length) do
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: XML Knoten

  Alt 13. Feb 2006, 21:26
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
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#6

Re: XML Knoten

  Alt 13. Feb 2006, 21:42
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: XML Knoten

  Alt 13. Feb 2006, 21:53
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:

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

marabu
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#8

Re: XML Knoten

  Alt 13. Feb 2006, 22:59
Hallo Marabu!
Beim Parsen der Datei bekomme ich Fehlermeldung.
Ich erstelle neue Datei und dann melde ich mich
Grüsse
Chris
  Mit Zitat antworten Zitat
krys2000

Registriert seit: 12. Feb 2006
15 Beiträge
 
#9

Re: XML Knoten

  Alt 14. Feb 2006, 17:47
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: XML Knoten

  Alt 15. Feb 2006, 08:22
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
Angehängte Dateien
Dateityp: zip xmldemo_103.zip (2,8 KB, 85x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:47 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