Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Teile von XML auslesen und anzeigen (https://www.delphipraxis.net/100516-teile-von-xml-auslesen-und-anzeigen.html)

semo 29. Sep 2007 23:59

Re: Teile von XML auslesen und anzeigen
 
Zitat:

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.
sowas funktioniert auch.
man muss nur alle childnodes von <sessions> durchlaufen.

ulhau 30. Sep 2007 01:14

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"!!!

marabu 30. Sep 2007 07:58

Re: Teile von XML auslesen und anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

Zitat:

Zitat von XXcD
... Kann mir nicht einer nen Codeschnipzel geben, was nur eine bestimmte Spalte von der XML Datei ausliest. ...

ich finde es zwar schade, dass du noch keine passende Idee für deine Benutzerschnittstelle vorgestellt hast, und auch beim Suchen nach Code-Beispielen hast du dich wohl etwas ungeschickt angestellt, aber ich hänge dir trotzdem eine Demo an. Sie liest deine Beispieldaten in ein Grid ein. Sobald du den Code nachvollzogen hast, solltest du in der Lage sein ihn an deine Bedürfnisse anzupassen.

Meine Demo ist selbst eine Anpassung des Codes aus XML komplett auslesen. Nur der Vollständigkeit wegen: Du kannst solche Daten auch mittels TClientDataSet verarbeiten - dann kommst du mit XML fast gar nicht in Berührung.

Freundliche Grüße

XXcD 30. Sep 2007 10:28

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?

marabu 30. Sep 2007 14:33

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

XXcD 30. Sep 2007 14:39

Re: Teile von XML auslesen und anzeigen
 
Ok ich beschreibe das mal deutlicher.
Meine XMl Datei sieht kommplett so aus:

Code:
<?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>
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.

marabu 30. Sep 2007 14:51

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:
// ...
      ExtractCells(documentElement.ChildNodes['sessions'].ChildNodes, StringGrid, FIELDNAMES);
// ...
Eine Komponente der Klasse TLabel kannst du leicht dynamisch erstellen, aber über die Platzierung musst du dir ein wenig Gedanken machen.

Delphi-Quellcode:
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;
Ob TLabel wirklich so gut sind?

Freundliche Grüße

XXcD 30. Sep 2007 15:10

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.

marabu 30. Sep 2007 16:00

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:
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;
Vielleicht kannst du ja die Funktion NewLabel() schreiben?

Delphi-Quellcode:
function NewLabel(
    parent: TWinControl;  // ohne Parent keine Anzeige
    index: Integer;       // index ermöglicht calculated layout
    const caption: string // was soll angezeigt werden?
): TLabel;
Getippt und nicht getestet.

XXcD 30. Sep 2007 16:51

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 01:20 Uhr.
Seite 2 von 3     12 3      

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