![]() |
Teile von XML auslesen und anzeigen
Hallo,
ich möchte gerne eine XML Datei auslesen und bestimmte Teile davon in Labels anzeigen lassen. Also z.b. Name, race, level usw. Und untereinander sollen mehre Einträge angezeigt werden. Zitat:
|
Re: Teile von XML auslesen und anzeigen
ich hab da noch ein paar probleme, also ich bitet dich.
ein wenig genauer darf die definition schons ein. |
Re: Teile von XML auslesen und anzeigen
naja muss das nicht so genau wissen. Wäre schonmal gut wenn einer ne Seite hätte wo man erklärt bekommt wie man XML Datein ausliest und verarbeitet(Also anzeigen lassen).
|
Re: Teile von XML auslesen und anzeigen
Hi,
wenn du noch keine Erfahrung im Umgang mit XML-Dateien hast, dann sind vielleicht ein paar ![]() Was ist jetzt dein Hauptproblem: Das Auslesen der Daten aus dem XML-Dokument oder das Einbringen der XML-Daten in deine Benutzeroberfläche? Grüße vom marabu |
Re: Teile von XML auslesen und anzeigen
Beides :-D
Ich müsste wissen wie ich die XMl Datei in Delphi öffnen kann also mit welcher Komponente und nen wenig quellcode dazu wäre nicht schlecht. Und wie ich die einzelnen Teile in Label anzeigen kann. Edit: was ich noch sagen wollte, ich zeig hier mal nen Stück aus der XML Datei damit ihr euch mal nen Bild davon machen könnt: Zitat:
Zitat:
|
Re: Teile von XML auslesen und anzeigen
|
Re: Teile von XML auslesen und anzeigen
Hi,
Wenn die Ebebenen nicht tiefer als 2 sind, also nach Art von Ini-Dateien, dann bietet sich doch die Klasse "TXMLINI" an. Das funktioniert alles genauso wie bei "TINIFILE" und steht hier: "http://sourceforge.net/projects/txmlini" zum Downloaden. Und Tschüssss!!! |
Re: Teile von XML auslesen und anzeigen
Also ich hab jetzt noch einiges gefunden, was mich aber nicht wirklich weiter bringt. Kann mir nicht einer nen Codeschnipzel geben, was nur eine bestimmte Spalte von der XML Datei ausliest.
Zitat:
|
Re: Teile von XML auslesen und anzeigen
Hallo,
nein, wir können dir nicht ein Codeschnipsel geben. Denn es gibt zig Libraries, die XML Daten parsen, lesen und/oder schreiben können. Alle arbeiten irgendwie anders. Ich empfehle dir die XMLLib: ![]() da wärs recht einfach:
Delphi-Quellcode:
oder so ähnlich.
Showmessage(xmllib.root.nodes[0].nodes.nodebyname('').value.asstring);
Ohne XML verstanden zu haben, hilft dir das aber nicht viel. |
Re: Teile von XML auslesen und anzeigen
Hi,
ich nochmal. Ich glaube das mit: <sessions> <plr> ... </plr> <plr> ... </plr> <plr> ... </plr> </sessions> funktioniert so nicht. Es wird immer nur die letzte Sektion angezeigt. Möglicherweise ist es so: <sessions> <plr1> ... </plr1> <plr2> ... </plr2> <plr3> ... </plr3> </sessions> besser. Beim XML-Format müssen auch einige vorgaben beim benutzen von Schriftzeichen eingehalten werden. Tschüsss !!! |
Re: Teile von XML auslesen und anzeigen
Zitat:
man muss nur alle childnodes von <sessions> durchlaufen. |
Re: Teile von XML auslesen und anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Also ich habe da mal einen kleinen Test angehängt. Es kann ja sein das es schon reicht. Aber jetzt "Nacht auch"!!! |
Re: Teile von XML auslesen und anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
Zitat:
Meine Demo ist selbst eine Anpassung des Codes aus ![]() Freundliche Grüße |
Re: Teile von XML auslesen und anzeigen
Der Anhang von marubu ist schon fast Perfekt. Das ist genau das was ich gesucht habe. Mein Problem ist aber noch wenn ich aus der ganzen XML Datei die Sessions Spalte verarbeiten will, dann wird da nichts angezeigt. Muss ich da noch was einstellen um verscheidene Ebenen zu verarbeiten?
|
Re: Teile von XML auslesen und anzeigen
Hallo,
du solltest dein Problem nochmal mit anderen Worten beschreiben, denn eine Spalte gibt es in deinem XML-Dokument nicht. XML kennt Elemente und Attribute: <element attr="value"/>. Meine Demo geht von deinen Beispieldaten aus. Wenn die Echtdaten anders aussehen, dann musst du den Code anpassen oder bessere Beispieldaten zur Verfügung stellen. Freundliche Grüße |
Re: Teile von XML auslesen und anzeigen
Ok ich beschreibe das mal deutlicher.
Meine XMl Datei sieht kommplett so aus:
Code:
Jetzt möchte ich die Player Namen in Labels haben und die labels sollen Dynamisch sein. Also immer soviele Labels wie auch Spieler online sind. Ich habe leider nicht viel erfahrung in dem Bereich XML in Delphi und wie man Labels dynamisch erstellt.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="server_stats.xsl"?> <serverpage> <status> <platform>******************</platform> <uptime>0 days, 21 hours, 18 minutes, 1 seconds</uptime> <oplayers>2</oplayers> <cpu>0.00</cpu> <qplayers>0</qplayers> <ram>133.133</ram> </status> <sessions> <Player> <name>*****</name> <race>5</race> <class>1</class> <gender>1</gender> <pvprank>0</pvprank> <level>1</level> <map>0</map> <areaid>154</areaid> <xpos>1657.601685</xpos> <ypos>1678.327881</ypos> <ontime>0 hours, 1 minutes, 4 seconds</ontime> <latency>7</latency> </Player> <Player> <name>*****</name> <race>11</race> <class>1</class> <gender>0</gender> <pvprank>0</pvprank> <level>70</level> <map>0</map> <areaid>1617</areaid> <xpos>-8941.937500</xpos> <ypos>511.358368</ypos> <ontime>0 hours, 2 minutes, 44 seconds</ontime> <latency>1</latency> </Player> </sessions> </serverpage> |
Re: Teile von XML auslesen und anzeigen
Hallo,
in deinen ursprünglichen Beispieldaten war <sessions> das documentElement, in den Echtdaten liegt dieses Element eine Ebene tiefer, also musst du den Zugriff auf die Liste der <player> entsprechend anpassen:
Delphi-Quellcode:
Eine Komponente der Klasse TLabel kannst du leicht dynamisch erstellen, aber über die Platzierung musst du dir ein wenig Gedanken machen.
// ...
ExtractCells(documentElement.ChildNodes['sessions'].ChildNodes, StringGrid, FIELDNAMES); // ...
Delphi-Quellcode:
Ob TLabel wirklich so gut sind?
procedure TDemoForm.ButtonClick(Sender: TObject);
begin with TLabel.Create(self) do begin Parent := self; // oder ein anderes WinControl Caption := 'Dynamic'; Left := 50; Top := 50; end; end; Freundliche Grüße |
Re: Teile von XML auslesen und anzeigen
Ja das funtzt, vielen Dank. Aber wenn ich das jetzt mit Labels machen will, was muss ich dann in dem Quellcode ändern. Da ist ja jetzt alles auf nen Stringgrid angepasst.
|
Re: Teile von XML auslesen und anzeigen
Das ist einfach: Den Code für das Grid entfernen und den Code für das Erzeugen der Label-Komponenten einfügen.
Ich würde die Prozedur ExtractCells() aus meiner Demo anpassen. So kannst du alle Angaben eines Players auf einem Label ausgeben:
Delphi-Quellcode:
Vielleicht kannst du ja die Funktion NewLabel() schreiben?
procedure ExtractValues(nodes: IXMLNodeList; names: array of string; labels: TObjectList; parent: TWinControl);
var RecNode, FldNode: IXMLNode; iRec, iFld: Integer; s: string; begin labels.Clear; for iRec := 0 to Pred(nodes.Count) do begin RecNode := nodes[iRec]; s := ''; for iFld := Low(names) to High(names) do begin FldNode := RecNode.ChildNodes[names[iFld]]; s := s + ' ' + VarToStr(FldNode.NodeValue); end; labels.Add(NewLabel(parent, labels.Count, Trim(s))); end; end;
Delphi-Quellcode:
Getippt und nicht getestet.
function NewLabel(
parent: TWinControl; // ohne Parent keine Anzeige index: Integer; // index ermöglicht calculated layout const caption: string // was soll angezeigt werden? ): TLabel; |
Re: Teile von XML auslesen und anzeigen
Also so wirklich funktionieren tut es jetzt nicht. Hab jetzt mal die unit Contnrs eingebunden wegen TObjectList. Aber was muss z.b. hier hin:
procedure TDemoForm.ButtonClick(Sender: TObject); begin Memo.Text:=GetHTML('http://**********stats.xml'); with XmlDocument do begin Active := False; XML.Assign(Memo.Lines); try Active := True; ExtractValues(documentElement.ChildNodes['sessions'].ChildNodes, >>>>>>>>>Was muss hier rein???<<<<<<<<, FIELDNAMES); except on E: Exception do ShowMessage(E.Message); end; end; end; |
Re: Teile von XML auslesen und anzeigen
Wenn du dir die Signatur der Prozedur ExtractValues() anschaust, dann findest du dort den erwarteten Typ (TObjectList). Du brauchst also ein Object dieser Klasse und da Labels darin verwaltet werden sollen, ist "Labels" auch nicht der schlechteste Bezeichner. Da die Labels für die Anzeige länger leben müssen als eine Prozedur, gehört das Objekt als privates Feld zur Form. Jetzt musst du noch zwei Ereignisse der Form ausfindig machen, bei denen du dieses Objekt sinnvollerweise instanzierst und wieder zerstörst - und schon kannst du es als Parameter beim Aufruf von ExtractValues() verwenden.
|
Re: Teile von XML auslesen und anzeigen
:cry: :cry: :cry: Ich versteh kein Wort. Kannst du mir nicht bitte sagen wie ich das zum laufen kriege??? Also was ich noch für Komponten brauche usw. Biddeeeee
|
Re: Teile von XML auslesen und anzeigen
Hallo,
ich fürchte du überschaust die Komplexität noch nicht so ganz: Es ist nicht so, dass du meinen Code einfach nehmen kannst und ein, zwei kleine Änderungen daran machen ein fertiges Programm daraus. Ich kann dir erklären, was ein privates Feld einer Form ist, aber wenn du es selbst nicht weißt, dann fehlen dir sehr viele Grundlagen. Da ist es fraglich, ob du das zu Ende bringst, denn gleich gehe ich ins Bettchen und ab morgen stecke ich wieder für Tage bis zum Hals in meinen Projekten. Mein Tipp: versuche in deinem Programm nur Konzepte zu verwenden, die du auch schon beherrschst. Wenn du weder mit XML noch mit dynamisch erstellten visuellen Komponenten etwas gemacht hast, dann "teile und herrsche": Schreibe erstmal ein Programm, in welchem du das Anordnen von dynamisch erstellten Labels übst. Dann schreibe ein Programm, welches alle notwendigen Zugriffe auf einen XML DOM enthält. Wenn du die einzelnen Techniken beherrschst, dann kannst du das Gelernte miteinander kombinieren - und am Ende wird ein Programm daraus. Nimm es mir nicht übel, aber wenn wir beide so weiter machen wie bisher, dann habe ich am Ende dein Programm geschrieben und alles was mir wichtig ist bleibt liegen. Frage, wenn du Verständnisprobleme hast, und ich werde dir antworten, aber dein Programm kann und will ich nicht schreiben. Freundliche Grüße |
Re: Teile von XML auslesen und anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, ich habe das jetzt noch mal ausgegraben.
Also Marabu für mich war deine Schufterei nicht umsonst. Als "XMLIni" geschädigter hat mich dann doch die Neugier gepakt wie das weiter geht. Aber der klize kleine Schritt hat dann doch noch gefehlt ("['sessions'].ChildNodes"). Aber meine Vermutung das bei nicht eindeutiger Bezeichnervergabe immer nur eine Sektion gezielt bearbeitet werden kann ist laut den Tut's von "Celine Hagbard" und "Christopher Harms" richtig gewesen. Ich habe das Demo jetzt mal beendet. Nur das mit den Labels ist irgendwie blöd. Man stelle sich mal vor das sich hunderte Label's auf dem Formular tummel. Also das mit dem StringGrid ist schon Optimal da passt 'ne menge rein. Also Marabu, Herzlichen Dank für die Lehrstunde und an XXcD, blos nicht aufgeben. Tschüsss! |
Re: Teile von XML auslesen und anzeigen
Danke dass du dir die Arbeit gemacht hast ich schau mir die Demo gleich mal an.
|
Re: Teile von XML auslesen und anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Na da ist wohl doch nicht mehr das Interesse da. Ich hab das jetzt noch mit den Label's gemacht und angehängt. Eine Liesmich.txt ist auch dabei. Na dann Tschüsss ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 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-2025 by Thomas Breitkreuz