webForumDet fria alternativet

Hämta info från extern XML-fil?

XML

22 svar · 1 267 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Hur kan jag lättast hämta "title", "release_date", "thumbnail", "price" och "link" från följande XML-struktur, (med php)?

<product type="movie">
<chartpos>1</chartpos>
<id>113884</id>
&#8722;
<link>
http://cdon.fi/elokuvat/james_bond_6%3a_on_her_majesty's_secret_service-113884
</link>
&#8722;
<buy_link>
http://cdon.fi/cart/add?product-id=113884&referer=%2felokuvat%2fjames_bond_6%253a_on_her_majesty's_secret_service-113884
</buy_link>
<in_stock>yes</in_stock>
&#8722;
<thumbnail>
http://cdon.fi/media-dynamic/images/product/000/535/535690.jpg
</thumbnail>
&#8722;
<images>
&#8722;
<image>
http://cdon.fi/media-dynamic/images/product/000/535/535689.jpg
</image>
</images>
&#8722;
<big_images>
&#8722;
<big_image>
http://cdon.fi/media-dynamic/images/product/000/535/535688.jpg
</big_image>
</big_images>
<title>James Bond 6: On Her Majesty's Secret Service</title>
<media>DVD</media>
<release_date>2007-01-17</release_date>
<price currency="EUR">0.95</price>
</product>
Medlem sedan feb. 20034 441 inlägg
#2

Såhär!

<?php
$xml = simplexml_load_file("http://domän.com/filen.xml");
if($xml){
	echo $xml->title . "<br />\n";
	echo $xml->release_date . "<br />\n";
	echo $xml->thumbnail . "<br />\n";
	echo $xml->price . "<br />\n";
	echo $xml->link . "<br />\n";
}
?>

Sen vet jag inte om det är mer saker i din fil (framgår inte av ditt exempel ovan) men om <product> är rooten så ska det vara som min kod.

Medlem sedan feb. 20034 441 inlägg
#3

Om om du vill ha med valutan på price

<?php
$xml = simplexml_load_file("http://domän.com/filen.xml");
if($xml){
	echo $xml->title . "<br />\n";
	echo $xml->release_date . "<br />\n";
	echo $xml->thumbnail . "<br />\n";
	echo $xml->price . " " . $xml->price['currency'] . "<br />\n";
	echo $xml->link . "<br />\n";
}
?>
Medlem sedan juli 20041 271 inlägg
#4

MickeA.com skrev:

Såhär!

<?php
$xml = simplexml_load_file("http://domän.com/filen.xml");
if($xml){
	echo $xml->title . "<br />\n";
	echo $xml->release_date . "<br />\n";
	echo $xml->thumbnail . "<br />\n";
	echo $xml->price . "<br />\n";
	echo $xml->link . "<br />\n";
}
?>

Sen vet jag inte om det är mer saker i din fil (framgår inte av ditt exempel ovan) men om <product> är rooten så ska det vara som min kod.

Tyvärr verkar inte den koden fungera.
Får bara en blank/vit sida, utan några fel (display_errors är på).

Medlem sedan feb. 20034 441 inlägg
#5

Paste'a vad du får ut på skärmen med:

$xml = simplexml_load_file("http://domän.com/filen.xml"); 
print_r($xml);

/r du har nog inte visat hela xmlfilen isf... som jag skrev i mitt inlägg så förutsätter min kod att xmlfilen ser likadant ut i verkligheten som i ditt exempel. Men skriv ut med print_r och paste'a här.

Medlem sedan aug. 20039 340 inlägg
#6

Blank sida får du typiskt om en funktion ine existerar, och simplexml existerar bara i PHP5 och uppåt. Kör en phpinfo() och kolla om du inte har php4 på servern.

Medlem sedan feb. 20034 441 inlägg
#7

nitro2k01 skrev:

Blank sida får du typiskt om en funktion ine existerar, och simplexml existerar bara i PHP5 och uppåt. Kör en phpinfo() och kolla om du inte har php4 på servern.

Men med SimpleXML får man även blank sida om man inte anger elementen rätt. Dvs. om <product> inte är rooten (vilket inte jag tror att den är) så kommer inget att skrivas ut.

Men det lär vi upptäckte så fort vi har fått se en print_r av $xml.

Medlem sedan juli 20041 271 inlägg
#8

Filen är rätt stor, och sidan står bara och laddar/tuggar med koden nedan.

$xml = simplexml_load_file("http://domän.com/filen.xml"); 
print_r($xml);

P.s. Jag kör med php 5.

Filen har följande i början:

<cdon_products type="movies_top_50" export_date="2009-08-29">
<countries>
<country iso="FI">
Medlem sedan feb. 20034 441 inlägg
#9

...men du måste ju (som jag skrev redan i mitt första inlägg) följa den hierarki som filen är uppbyggd av...

$xml i det här fallet är rooten och det "kanske" kan vara cdon_products eller så är det något helt annat, om du vill ha mer hjälp så får du paste'a / bifoga hela koden, det är omöjligt för mig och andra att gissa hur din xmlfil ser ut, eller vad tror du?

Medlem sedan juli 20041 271 inlägg
#10

Hela filen ser ut såhär:

<cdon_products type="movies_top_50" export_date="2009-08-29">
&#8722;
<countries>
&#8722;
<country iso="FI">
&#8722;
<product type="movie">
<chartpos>1</chartpos>
<id>113884</id>
&#8722;
<link>
http://cdon.fi/elokuvat/james_bond_6%3a_on_her_majesty's_secret_service-113884
</link>
&#8722;
<buy_link>
http://cdon.fi/cart/add?product-id=113884&referer=%2felokuvat%2fjames_bond_6%253a_on_her_majesty's_secret_service-113884
</buy_link>
<in_stock>yes</in_stock>
&#8722;
<thumbnail>
http://cdon.fi/media-dynamic/images/product/000/535/535690.jpg
</thumbnail>
&#8722;
<images>
&#8722;
<image>
http://cdon.fi/media-dynamic/images/product/000/535/535689.jpg
</image>
</images>
&#8722;
<big_images>
&#8722;
<big_image>
http://cdon.fi/media-dynamic/images/product/000/535/535688.jpg
</big_image>
</big_images>
<title>James Bond 6: On Her Majesty's Secret Service</title>
<media>DVD</media>
<release_date>2007-01-17</release_date>
<price currency="EUR">0.95</price>
</product>
</country>
</countries>
</cdon_products>

..fast då med flera produkter.

Medlem sedan feb. 20034 441 inlägg
#11

..och då ska det här fungera:

<?php

if($xml = simplexml_load_file("http://domän.com/filen.xml")){
	echo $xml->countries->country->product->title . "<br />\n";
	echo $xml->countries->country->product->release_date . "<br />\n";
	echo $xml->countries->country->product->thumbnail . "<br />\n";
	echo $xml->countries->country->product->price . " " . $xml->price['currency'] . "<br />\n";
	echo $xml->countries->country->product->link . "<br />\n";
}
?>

Givetvis måste du använda någon form av loop (foreach eller for($i = 0.. om du ska ha alla produkter).

Medlem sedan juli 20041 271 inlägg
#12

MickeA.com skrev:

..och då ska det här fungera:

<?php

if($xml = simplexml_load_file("http://domän.com/filen.xml")){
	echo $xml->countries->country->product->title . "<br />\n";
	echo $xml->countries->country->product->release_date . "<br />\n";
	echo $xml->countries->country->product->thumbnail . "<br />\n";
	echo $xml->countries->country->product->price . " " . $xml->price['currency'] . "<br />\n";
	echo $xml->countries->country->product->link . "<br />\n";
}
?>

Givetvis måste du använda någon form av loop (foreach eller for($i = 0.. om du ska ha alla produkter).

Uppskattar verkligen din hjälp.
Verkar fortfarande inte fungera, sidan står bara och laddar/tuggar. :(

Medlem sedan feb. 20034 441 inlägg
#13

Guldstrand skrev:

Uppskattar verkligen din hjälp.
Verkar fortfarande inte fungera, sidan står bara och laddar/tuggar. :(

måste jag se hur xmlfilen ser ut, bifoga hela xmlfilen zippat eller något.. Hur stor är filen? Jah har utan problem jobbat med SimpleXML och flöden på ca 7Mb och det gick trögt, men fungerade trots allt bra.

Medlem sedan juli 20041 271 inlägg
#14

Här är filen.
(Var tvungen att ändra filtypen till txt.)

Medlem sedan feb. 20034 441 inlägg
#15

Vad händer om du testar följande kod:

foreach($xml->countries->country->product as $item){
   echo $item->link . "<br />\n";
}
Medlem sedan feb. 20034 441 inlägg
#16

Det här fungerar (ja, testa själv):
http://anderssonweb.se/cdon.php

XML filen har jag tagit direkt som du bifogat den (http://anderssonweb.se/cdon.xml).

Medlem sedan juli 20041 271 inlägg
#17

MickeA.com skrev:

Vad händer om du testar följande kod:

foreach($xml->countries->country->product as $item){
   echo $item->link . "<br />\n";
}

Samma som tidigare, (sidan bara laddar).

Medlem sedan feb. 20034 441 inlägg
#18

Guldstrand skrev:

Samma som tidigare, (sidan bara laddar).

Då har du något annat fel i koden, som du ser i mitt tidigare inlägg och följer länken, jag använder endast den kod som är synlig där och exakt samma XML fil som jag du delade med dig av.

Medlem sedan juli 20041 271 inlägg
#19

MickeA.com skrev:

Då har du något annat fel i koden, som du ser i mitt tidigare inlägg och följer länken, jag använder endast den kod som är synlig där och exakt samma XML fil som jag du delade med dig av.

Hmm...
Jag funderar på om cdon har "spärrat" så att man inte ska kunna hämta infon direkt från xml-filerna på deras server?
(Är det jag har försökt med hela tiden.)

Medlem sedan feb. 20034 441 inlägg
#20

Jo, så kan det vara, är det här något du "kommit på" eller en tjänst dom erbjuder?
iofs.. om du kör if($xml = simplexml_load_file()){ så bör den gå på else om filen inte hittas/kan läsas, testa det...

597 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
458 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
458 ms — ändringar (db)