78026
Goto Top

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

Content-Key: 213322

Url: https://administrator.de/contentid/213322

Printed on: April 25, 2024 at 21:04 o'clock

Member: colinardo
colinardo Aug 04, 2013 updated at 17:57:14 (UTC)
Goto Top
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
(string) $STg->Heim
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
Mitglied: 78026
78026 Aug 04, 2013 at 16:00:35 (UTC)
Goto Top
Wow. Ich war auf der Seite habs aber wohl leider im Frust überlesen. face-sad

Besten Dank! face-smile Es funktioniert face-smile
Member: colinardo
colinardo Aug 05, 2013 updated at 10:45:54 (UTC)
Goto Top
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 $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");  
}
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