Pogledajte određenu poruku
Staro 28. 08. 2013.   #1
mb_sa
profesionalac
Qualified
 
Datum učlanjenja: 19.05.2007
Poruke: 123
Hvala: 13
3 "Hvala" u 3 poruka
mb_sa is on a distinguished road
Default Xpath - selektovanje određenih node-ova unutar željenog parent node-a

Zdravo.

Radim parsiranje i pretraživanje XML fajlove koje sadrže podatke o utkmicama po sportovima. (xml file je u prilogu)

Imam nedoumice kako da efikasno pretražujem XML sa Xpathom (nezaboravimo da PHP ima limitiranu podršku sa Xpath 2.0).

1) Potrebno je da izbacim sve utakmice u toku (LIVE) za jedan sport, tačnije Fudbal.

PHP kôd:
<?php 

$xml_data 
simplexml_load_file("livescore_full.xml");

// Pokupi utakmice koje su toku (1.poluvrijeme, 2. poluvrijeme, Poluvrijeme (HT))
$live_matches $xml_data->xpath('//Match[Status[@Code="6"]] | //Match[Status[@Code="7"]] | //Match[Status[@Code="31"]]');

print_r($live_matches);

?>
Ovo i vraća te utakmice, ali za SVE sportove. Može vratiti utakmice za bakset i slično. Da li nekako mogu ograničiti i specificirati da pretražuje smo po određenom sportu na osnovu njegovog ID?


2) Ponekad je potrebno da pokupim sve utakmice jednog turnira, što mogu dobiti sa:

PHP kôd:
$tournament_matches $xml_data->xpath('//Tournament[@UniqueTournamentId="373"]'); 
Ali ako pogledate strukturu XML fajla, Tournament ima dva roditelja. Category i Sport nodove. Sa navedenim upitom imam podatke o turniru i pripadajućim utakmicama, ali ne i o kategoriji i sportu o kojem pripada. Kako da dobavim te podatke kroz jedan xpath query (ili što efikasnije) u sljedećoj strukturi (visedimenzionlani niz objekata odgovarajuće XML strukture):

Kôd:
	<Sport SportId="1">
		<Name language="bs">Fudbal</Name>
		<Name language="en">Soccer</Name>
			<Category CategoryId="13">
			<Name language="bs">Brazil</Name>
			<Name language="en">Brazil</Name>
				<Tournament TournamentId="283" UniqueTournamentId="373">
				<Name language="bs">Copa do Brasil</Name>
				<Name language="en">Copa do Brasil</Name>
					<Match MatchId="7093555" Id="4197313">
					<MatchDate>2013-08-29T02:50:00 CEST</MatchDate>
					<Team1 TeamId="87713" UniqueTeamId="5926">
					<Name language="bs">Gremio RS</Name>
					<Name language="en">Gremio RS</Name>
					</Team1>
					<Team2 TeamId="87103" UniqueTeamId="1968">
					<Name language="bs">Santos FC SP</Name>
					<Name language="en">Santos FC SP</Name>
					</Team2>
					<Status Code="0">
					<Name language="bs">Nije počelo</Name>
					<Name language="en">Not started</Name>
					</Status>
					<Winner>0</Winner>
					</Match>
			</Tournament>
			</Category>
	</Sport>
U prilogu su php skripta i XML file.

Lp.
Priloženi fajlovi
Tip fajla: zip livescore.zip (27,7 KB, 780 pregleda)
mb_sa je offline   Odgovorite uz citat