XML-Daten vergleichen, größeren Wert anzeigen

  • Themenstarter Themenstarter Creeping
  • Beginndatum Beginndatum
C

Creeping

Hallo,

Ich bin gerade dabei eine Xfire Signatur zu schreiben, dafür gibts von Xfire gegebene XML dokumente.

Hier: http://www.xfire.com/xml/creepingdevil/gameplay/

Nun will ich von jedem XML dokument die "weektime" vergleichen und die restlichen Daten dann über die ID nehmen, wo der größte wert bei "weektime" ist...

weiß jemand wie das geht?

Es muss aber so gehen, dass ich die id nicht manuell angebe, da ja auch andere spiele einen höheren wert haben können^^

mfg Creeping
 
Naja XML Datei mit PHP auslesen, die Weektimes auslesen und in ein Array speichern.
Dann sortieren, fertig.

Wo besteht genau dein Problem?
 
Hmm,

also tie Weektimes hab ich jetzt ausgelesen, ist nur das prob wie bekomm ich die jetzt ins array...

und dann noch wie kann über die weektimes dann noch dem rest von dem block auslesen
 
Also das ist mein Code von dem test, den ich mache^^

PHP:
<?php
$game  = simplexml_load_file("http://www.xfire.com/xml/creepingdevil/gameplay/");

foreach($game->game as $gametime) 
{
	$time = $gametime->weektime;
}
	echo $time;

		
?>

Ergebnis: Bekomme den Untersten Wert der XML angezeigt
 
Hast du schonmal mit einem Array gearbeitet? Weil dafür benötigt man wirklich nur Grundlagen. ;)

Mit diesem Beispiel hast du alle gefundenen Werte in einem Array stehen, welches du nun umsortieren und wieder ausgeben kannst:

PHP:
<?php
$array = array()
$game  = simplexml_load_file("http://www.xfire.com/xml/creepingdevil/gameplay/");

foreach($game->game as $gametime) 
{
	$array[] = $gametime->weektime;
}
print_r( $array );
?>
 
Naja schon, aber auch nur mit entweder mit automatischen arrays oder mit manuel definierten also array("wert1,"wert2","wert3",...)

hab jetzt den code von deluxe genommen und bekomme das ergebnis:

Array ( [0] => SimpleXMLElement Object ( [0] => 0 ) [1] => SimpleXMLElement Object ( [0] => 0 ) [2] => SimpleXMLElement Object ( [0] => 0 ) [3] => SimpleXMLElement Object ( [0] => 0 ) [4] => SimpleXMLElement Object ( [0] => 0 ) [5] => SimpleXMLElement Object ( [0] => 0 ) [6] => SimpleXMLElement Object ( [0] => 0 ) [7] => SimpleXMLElement Object ( [0] => 1185 ) [8] => SimpleXMLElement Object ( [0] => 0 ) [9] => SimpleXMLElement Object ( [0] => 0 ) [10] => SimpleXMLElement Object ( [0] => 0 ) [11] => SimpleXMLElement Object ( [0] => 0 ) [12] => SimpleXMLElement Object ( [0] => 0 ) [13] => SimpleXMLElement Object ( [0] => 0 ) [14] => SimpleXMLElement Object ( [0] => 0 ) [15] => SimpleXMLElement Object ( [0] => 0 ) [16] => SimpleXMLElement Object ( [0] => 0 ) [17] => SimpleXMLElement Object ( [0] => 15758 ) [18] => SimpleXMLElement Object ( [0] => 0 ) [19] => SimpleXMLElement Object ( [0] => 9357 ) )

wenn ich das jetzt mit asort(); sortieren will bekomme ich eine 1 angezeigt *lol*
 
Moin,

wenn du schon sowas Feines wie XML-Daten hast, dann empfiehlt es sich, die passenden Werkzeuge zu nutzen.

XML-Daten kann man per XSLT transformieren, und XSLT kann auch sortieren :)

PHP-Skript:
PHP:
<?php
$xml = new DomDocument('1.0', 'UTF-8');
$xml->load('http://www.xfire.com/xml/creepingdevil/gameplay/');
$xp = new XsltProcessor;
$xsl = new DOMDocument;
$xsl->load('test.xsl');
$xp->importStylesheet($xsl);
$output = $xp->transformToXML($xml) or die('Transformation error!');
echo $output;
?>

Das XSL-Stylesheet(test.xsl)
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<xsl:apply-templates select="xfire/game">
     <xsl:sort select="weektime" order="descending" data-type="number" />
</xsl:apply-templates>
</xsl:template>

<xsl:template match="xfire/game">
  <xsl:if test="position()=1">
    <h1>Wochenbester</h1>
    id:       <xsl:value-of select="@id" /><br/>
    shortname:<xsl:value-of select="shortname" /><br/>
    longname: <xsl:value-of select="longname" /><br/>
    alltime:  <xsl:value-of select="alltime" /><br/>
    weektime: <xsl:value-of select="weektime" /><br/>
  </xsl:if>
</xsl:template>
</xsl:stylesheet>

Ausgabe(über $output verfügbar)
Wochenbester
id: 4684
shortname:cod2mp
longname: Call of Duty 2 Multiplayer
alltime: 1298405
weektime: 15758

Zur Beschreibung, was dort vor sich geht:


Im PHP-Skript:

XML-Dokument laden :
Code:
$xml = new DomDocument('1.0', 'UTF-8');
$xml->load('http://www.xfire.com/xml/creepingdevil/gameplay/');
XSLT-Processor initiieren:
Code:
$xp = new XsltProcessor;
Stylesheet laden:
Code:
$xsl = new DOMDocument;
$xsl->load('test.xsl');
Stylesheet in XSLT-Prozessor laden und XML-Dokument transformieren:
Code:
$xp->importStylesheet($xsl);
$output = $xp->transformToXML($xml) or die('Transformation error!');
Ausgabe:
Code:
echo $output;

Im Stylesheet:
Zugriff auf das Root-Element
Code:
<xsl:template match="/">
Schablone für xfire/game übernehmen
Code:
<xsl:apply-templates select="xfire/game">
...und dabei die Elemente absteigend numerisch nach weektime sortieren
Code:
<xsl:sort select="weektime" order="descending" data-type="number" />
Die Schablone für xfire/game
Code:
<xsl:template match="xfire/game">
Nur das 1.Element verarbeiten
Code:
<xsl:if test="position()=1">
Auswahl der Daten:
Code:
    <h1>Wochenbester</h1>
    id:       <xsl:value-of select="@id" /><br/>
    shortname:<xsl:value-of select="shortname" /><br/>
    longname: <xsl:value-of select="longname" /><br/>
    alltime:  <xsl:value-of select="alltime" /><br/>
    weektime: <xsl:value-of select="weektime" /><br/>

fertsch :)
 
Das sieht ja ma wunderbar aus^^

Jetzt habe ich das PHP dokument included und wollte die variable output auf das bild schreiben., nur da gibts dann nen fehler...

So sieht das aus:
PHP:
imagettftext($bild, 9, 0, 100, 18, $color, "xfiref", $output);

und da wird mir gesagt, die grafik enthält fehler...

was muss ich da hinmachen, das ich longname und weektime auf dem bild ausgeben kann?
 
Zeig deinen Code für das Erstellen des Images. Ich vermute, du sendest nicht den korrekten Content-Type als header, bspw. so:

PHP:
header('Content-Type: image/png');

Das müsste dann eingebaut werden, bevor das Ergebnisbild an den Client gesendet wird (echo, passthru, whatever-function).
 
Zurück