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, 2581 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
Off Topic

"Ich habe nichts zu verbergen"

(1)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ä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 ...

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

Frage von Akrosh zum Thema PHP ...

XML
gelöst XML - XSLT Formatierung mehrere verschiedene Werte (13)

Frage von chrisen zum Thema XML ...

Heiß diskutierte Inhalte
Hyper-V
gelöst Reiner Hyper- V Server oder lieber Rolle (32)

Frage von Winuser zum Thema Hyper-V ...

Linux Netzwerk
gelöst DHCP vergibt keine Adressen (30)

Frage von Maik82 zum Thema Linux Netzwerk ...

Exchange Server
gelöst Bestehende eMails autoamatisch weiterleiten (22)

Frage von metal-shot zum Thema Exchange Server ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...