![]() |
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 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