AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Teile von XML auslesen und anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Teile von XML auslesen und anzeigen

Ein Thema von XXcD · begonnen am 29. Sep 2007 · letzter Beitrag vom 5. Okt 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 00:59
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.
  Mit Zitat antworten Zitat
ulhau

Registriert seit: 23. Okt 2006
20 Beiträge
 
#12

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 02:14
Hi,

Also ich habe da mal einen kleinen Test angehängt.
Es kann ja sein das es schon reicht.

Aber jetzt "Nacht auch"!!!
Angehängte Dateien
Dateityp: zip test_mit_xmlini_145.zip (263,3 KB, 49x aufgerufen)
  Mit Zitat antworten Zitat
marabu

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

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 08:58
Moin,

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
Angehängte Dateien
Dateityp: zip xml-5_914.zip (2,3 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#14

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 11:28
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?
  Mit Zitat antworten Zitat
marabu

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

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 15:33
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
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 15:39
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.
  Mit Zitat antworten Zitat
marabu

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

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 15:51
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
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 16:10
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.
  Mit Zitat antworten Zitat
marabu

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

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 17:00
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.
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Teile von XML auslesen und anzeigen

  Alt 30. Sep 2007, 17:51
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:52 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