![]() |
XML Knoten
Wenn die XML Datei so ist hier Beispiel:
Code:
dann kriege ich die Werte vom Knoten mit diese Procedur
<?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>
Delphi-Quellcode:
Ist sie aber so dargestellt
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;
Code:
Kriege ich die Werte vom Knoten mit diese Procedur nicht in Memo
?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> Kann mir jemand ein TIP geben? Ich bin XML Anfänger Danke Chris [edit=alcaeus]Code-Tags eingefuegt. Mfg, alcaeus[/edit] |
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). |
Re: XML Knoten
Hallo Chris,
im deinem zweiten Fall liegen die Informationen als Attributwerte vor:
Delphi-Quellcode:
Grüße vom marabu
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; |
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 |
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 |
Re: XML Knoten
Hallo Marabu!
Erst mal Danke schön! Ich habe den Code angepast.
Delphi-Quellcode:
Da stimmt aber etwas nicht die Länge(nl.length) von nl=0 und die for schleife wird sofort beendet.
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; Grüsse Chris |
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:
Oder verwende mal selectNodes('//movie') um den Fehler einzukreisen.
ShowMessage(xmlDoc.documentElement.xml);
marabu |
Re: XML Knoten
Hallo Marabu!
Beim Parsen der Datei bekomme ich Fehlermeldung. Ich erstelle neue Datei und dann melde ich mich Grüsse Chris |
Re: XML Knoten
Hallo Marabu!
Meine Datei sieht jetzt so aus:
XML-Code:
Mit dem Code kann ich den Inhalt vom Knoten id und name auslesen
<?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>
Delphi-Quellcode:
Wie komme ich jetzt auf den Unterknoten darsteller und seine Inhalte haupt-darsteller und neben-darsteller?
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; Danke für ein Tip |
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. |
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