Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

XML auslesen und Werte vergleichen

Frage Entwicklung PHP

Mitglied: pennertenner

pennertenner (Level 1) - Jetzt verbinden

04.08.2013 um 16:12 Uhr, 2512 Aufrufe, 3 Kommentare

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:
01.
<?php 
02.
	if(!isset($_GET['ID'])) 
03.
	{		 
04.
		echo "<div class=\"divDet\"
05.
			<h3 class=\"error\">Fehlerhafte Datenübertragung</h3> 
06.
		</div>";		 
07.
08.
	else 
09.
10.
		//Konfiguration 
11.
		$strXMLPfad = "data/spielplan/"
12.
		$strDateiName = "actual.xml"
13.
		$strDat = $strXMLPfad . $strDateiName
14.
	 
15.
		//XML einlesen 
16.
		$xml = simplexml_load_file($strDat); 
17.
 
18.
		$IDSpiel = $_GET['ID']; 
19.
		 
20.
		$Verein1 = ""
21.
		$Verein2 = ""
22.
	 
23.
		foreach($xml->Spieltag as $ST
24.
25.
			if($ST->ID == $IDSpiel
26.
27.
				$Verein1 = $ST->Heim; 
28.
				$Verein2 = $ST->Gast; 
29.
30.
31.
		 
32.
		if($Verein1 != "" || $Verein2 != ""
33.
34.
			echo "<div class=\"divDet\">";	 
35.
			foreach($xml->Spieltag as $STg
36.
37.
				if($STg->Heim == $Verein1 && $STg->Gast == $Verein2
38.
39.
					echo "<h4>$Verein1 vs. $Verein2</h4>"
40.
					echo "Saison $STg->SaisonVorher: $STg->ErgVorher<br>"
41.
					echo "Saison $saison: $STg->ES<br>"
42.
					 
43.
					if($STg->Hinspiel != ""
44.
45.
						echo "Hinspiel $saison: $STg->Hinspiel<br>"
46.
47.
48.
				 
49.
				if($STg->Heim == $Verein2 && $STg->Gast == $Verein1
50.
				{				 
51.
					echo "<h4>$Verein2 vs. $Verein1</h4>"
52.
					echo "Saison $STg->SaisonVorher: $STg->ErgVorher<br>";	 
53.
					echo "Saison $saison: $STg->ES<br>"
54.
					 
55.
					if($STg->Hinspiel != ""
56.
					{		 
57.
						echo "Hinspiel $saison: $STg->Hinspiel<br>"
58.
					}			 
59.
60.
			}			 
61.
			echo "</div>"
62.
63.
		else 
64.
65.
				echo "<div class=\"divDet\"
66.
								<h3 class=\"error\">Fehlerhafte ID</h3> 
67.
							</div>";		 
68.
69.
70.
?>

XML:
01.
<Spielplan> 
02.
	<Spieltag> 
03.
		<ID>1</ID> 
04.
		<Tag>1. Spieltag</Tag> 
05.
		<Heim>Verein1</Heim> 
06.
		<HeimLogo>img/V1.jpg</HeimLogo> 
07.
		<Gast>Verein 2</Gast> 
08.
		<GastLogo>img/B2.jpg</GastLogo> 
09.
		<HZ>10:14</HZ> 
10.
		<ES>26:22</ES> 
11.
		<Datum>20.07.2013</Datum> 
12.
		<Uhrzeit>22:00</Uhrzeit> 
13.
		<Halle>Test-Halle</Halle> 
14.
		<ErgVorher>22:22</ErgVorher> 
15.
		<SaisonVorher>2012/13</SaisonVorher> 
16.
		<Hinspiel></Hinspiel> 
17.
	</Spieltag> 
18.
	<Spieltag> 
19.
                .... 
20.
  	</Spieltag> 
21.
</Spielplan>
Mitglied: colinardo
04.08.2013, aktualisiert um 19:57 Uhr
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
01.
(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
Bitte warten ..
Mitglied: pennertenner
04.08.2013 um 18:00 Uhr
Wow. Ich war auf der Seite habs aber wohl leider im Frust überlesen.

Besten Dank! Es funktioniert
Bitte warten ..
Mitglied: colinardo
05.08.2013, aktualisiert um 12:45 Uhr
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.
01.
$xml = simplexml_load_file('test.xml'); 
02.
$result = $xml->xpath('//Spieltag[ID=2]'); 
03.
if (count($result) == 1){ 
04.
	echo "ID: " . $result[0]->ID . "<br />Heim: " . $result[0]->Heim . " <br /> Gast: " . $result[0]->Gast; 
05.
}else
06.
	echo("Keine Element gefunden"); 
07.
}
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Werte vergleichen die nicht 100 Prozent gleich sind (4)

Frage von functionstrut zum Thema Batch & Shell ...

Datenbanken
gelöst SQL . 2 Felder bzw. Werte vergleichen und Rückmeldung 0 oder 1 (2)

Frage von wawidl zum Thema Datenbanken ...

Datenbanken
Spalte in einer SQL-Tabelle auslesen. Werte durch Tab getrennt! (4)

Frage von Janekr77 zum Thema Datenbanken ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...