78026
04.08.2013
6205
3
0
XML auslesen und Werte vergleichen
Hallo,
ich arbeite zur Zeit an einer mobilen Version unserer Handballvereinsseite. Dabei liegt mir der aktuelle Spielplan in Form einer XML-Datei vor. [siehe Unten]
Nun möchte ich auf einer Seite alle Informationen über den Spielparter zusammenfassen. [Ergebnis letztes Jahr/Hinspiel/...]
Dazu rufe ich meine "Details.php"auf und übermittle via GET meine Spieltags-ID. (Aufruf: ".../Details.php?ID=1)
Während der Saison finden wie schon erwähnt ja die Hin- und Rückrunde statt. Also gehe ich die einzelnen XML-Nodes via foreach durch, bis ich meine zwei Vereine habe. [$Verein1 = Heim; $Verein2 = Gast] [Ermittelt durch ID] Danach gehe ich die XML noch einmal durch und suche nun aber die ID des zweiten Spiels der Saison indem ich als IF-Bedingung angebe das $Verein2 nun Heim und $Verein1 nun Gast sein soll. Wenn ich das ganze dann ausgebe erhalte ich letztendlich aber nur 2 mal die Ausgabe des via ID aufgerufenen Spiels.
Sitze nun schon einige Stunden dran und verzweifele. Weiß jemand wo mein Fehler liegt? Kann mir jemand helfen? Wäre ziemlich dankbar dafür.
Die Daten in der XML stimmen übrigens überein. Sprich, der Name des Heimvereins beim ersten Spiel ist gleich dem, des Gastvereins beim Rückspiel und umgekehrt.
Liebe Grüß
PHP-Skript:
XML:
ich arbeite zur Zeit an einer mobilen Version unserer Handballvereinsseite. Dabei liegt mir der aktuelle Spielplan in Form einer XML-Datei vor. [siehe Unten]
Nun möchte ich auf einer Seite alle Informationen über den Spielparter zusammenfassen. [Ergebnis letztes Jahr/Hinspiel/...]
Dazu rufe ich meine "Details.php"auf und übermittle via GET meine Spieltags-ID. (Aufruf: ".../Details.php?ID=1)
Während der Saison finden wie schon erwähnt ja die Hin- und Rückrunde statt. Also gehe ich die einzelnen XML-Nodes via foreach durch, bis ich meine zwei Vereine habe. [$Verein1 = Heim; $Verein2 = Gast] [Ermittelt durch ID] Danach gehe ich die XML noch einmal durch und suche nun aber die ID des zweiten Spiels der Saison indem ich als IF-Bedingung angebe das $Verein2 nun Heim und $Verein1 nun Gast sein soll. Wenn ich das ganze dann ausgebe erhalte ich letztendlich aber nur 2 mal die Ausgabe des via ID aufgerufenen Spiels.
Sitze nun schon einige Stunden dran und verzweifele. Weiß jemand wo mein Fehler liegt? Kann mir jemand helfen? Wäre ziemlich dankbar dafür.
Die Daten in der XML stimmen übrigens überein. Sprich, der Name des Heimvereins beim ersten Spiel ist gleich dem, des Gastvereins beim Rückspiel und umgekehrt.
Liebe Grüß
PHP-Skript:
<?php
if(!isset($_GET['ID']))
{
echo "<div class=\"divDet\">
<h3 class=\"error\">Fehlerhafte Datenübertragung</h3>
</div>";
}
else
{
//Konfiguration
$strXMLPfad = "data/spielplan/";
$strDateiName = "actual.xml";
$strDat = $strXMLPfad . $strDateiName;
//XML einlesen
$xml = simplexml_load_file($strDat);
$IDSpiel = $_GET['ID'];
$Verein1 = "";
$Verein2 = "";
foreach($xml->Spieltag as $ST)
{
if($ST->ID == $IDSpiel)
{
$Verein1 = $ST->Heim;
$Verein2 = $ST->Gast;
}
}
if($Verein1 != "" || $Verein2 != "")
{
echo "<div class=\"divDet\">";
foreach($xml->Spieltag as $STg)
{
if($STg->Heim == $Verein1 && $STg->Gast == $Verein2)
{
echo "<h4>$Verein1 vs. $Verein2</h4>";
echo "Saison $STg->SaisonVorher: $STg->ErgVorher<br>";
echo "Saison $saison: $STg->ES<br>";
if($STg->Hinspiel != "")
{
echo "Hinspiel $saison: $STg->Hinspiel<br>";
}
}
if($STg->Heim == $Verein2 && $STg->Gast == $Verein1)
{
echo "<h4>$Verein2 vs. $Verein1</h4>";
echo "Saison $STg->SaisonVorher: $STg->ErgVorher<br>";
echo "Saison $saison: $STg->ES<br>";
if($STg->Hinspiel != "")
{
echo "Hinspiel $saison: $STg->Hinspiel<br>";
}
}
}
echo "</div>";
}
else
{
echo "<div class=\"divDet\">
<h3 class=\"error\">Fehlerhafte ID</h3>
</div>";
}
}
?>
XML:
<Spielplan>
<Spieltag>
<ID>1</ID>
<Tag>1. Spieltag</Tag>
<Heim>Verein1</Heim>
<HeimLogo>img/V1.jpg</HeimLogo>
<Gast>Verein 2</Gast>
<GastLogo>img/B2.jpg</GastLogo>
<HZ>10:14</HZ>
<ES>26:22</ES>
<Datum>20.07.2013</Datum>
<Uhrzeit>22:00</Uhrzeit>
<Halle>Test-Halle</Halle>
<ErgVorher>22:22</ErgVorher>
<SaisonVorher>2012/13</SaisonVorher>
<Hinspiel></Hinspiel>
</Spieltag>
<Spieltag>
....
</Spieltag>
</Spielplan>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213322
Url: https://administrator.de/contentid/213322
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo pennertenner,
bei simplexml-Objekten sind die Eigenschaften selber noch Objekte die du durch Zuweisen eines Typs erst noch expandieren musst um sie vergleichen zu können.
Dazu schreibst du beim Zugriff auf die Eigenschaft in dieser Form
Also überall wo du den Inhalt eines Elements als String erhalten möchtest schreibst du (string) davor, bei Integerwerten (int) usw.
Siehe dazu die Kommentare der PHP Referenz des simplexml-Elements:
http://www.php.net/manual/de/class.simplexmlelement.php
Grüße Uwe
bei simplexml-Objekten sind die Eigenschaften selber noch Objekte die du durch Zuweisen eines Typs erst noch expandieren musst um sie vergleichen zu können.
Dazu schreibst du beim Zugriff auf die Eigenschaft in dieser Form
(string) $STg->Heim
Siehe dazu die Kommentare der PHP Referenz des simplexml-Elements:
http://www.php.net/manual/de/class.simplexmlelement.php
Grüße Uwe
Vielleicht noch als Alternative zum parsen des XML-Files mit einer Schleife. Für solche Fälle hält das Simple-XML-Element noch die Funktion
In diesem Beispiel wird ein Element Spieltag mit einem enthaltenen ID Element dessen Wert 2 beträgt gesucht.
Die XPATH-Syntax ist ziemlich simpel und einfach zu lernen, dafür aber mächtig wenn du Elemente in XML-Dateien suchst (http://www.w3schools.com/xpath/xpath_syntax.asp).
Vielleicht hilft dir das irgendwann mal ...
Grüße Uwe
$xml->xpath('XPATHEXPRESSION')
bereit mit der sich ziemlich einfach Elemente mit bestimmtem Inhalt ohne eine Schleife finden lassen.In diesem Beispiel wird ein Element Spieltag mit einem enthaltenen ID Element dessen Wert 2 beträgt gesucht.
$xml = simplexml_load_file('test.xml');
$result = $xml->xpath('//Spieltag[ID=2]');
if (count($result) == 1){
echo "ID: " . $result->ID . "<br />Heim: " . $result->Heim . " <br /> Gast: " . $result->Gast;
}else{
echo("Keine Element gefunden");
}
Vielleicht hilft dir das irgendwann mal ...
Grüße Uwe