2014-09-30 98 views
1

我有點熟悉xml和json解析,但是Im對這個站點有問題。我試過PHP從xml文件解析json

$json_string="http://meteo.arso.gov.si/uploads/probase/www/plus/timeline/timeline_radar_si_short.xml"; 
$json = file_get_contents($json_string); 
$arr=json_decode($json_string, true); 

但它不起作用。當我分析數據時,我發現json中有一些javascript變量在javascript運行時轉爲數據,所以也許這就是爲什麼它不起作用。不知道如何解決它。

我想要做的是將值「9:10 CEST」...和「si0_20140930-0710_zm_si.jpg」...解析爲php數組。

+1

它是XML而不是你試圖解碼的JSON。使用'simplexml'來代替。 – 2014-09-30 10:39:27

+0

文件是xml。那麼,爲什麼你使用json_decode()? – Khushboo 2014-09-30 10:39:35

+0

不適用於xml eather – Jakadinho 2014-09-30 10:43:56

回答

1

以下解決方案的工作。不知道是否有更好的方法來做到這一點:

<?php 
    $xml_string="http://meteo.arso.gov.si/uploads/probase/www/plus/timeline/timeline_radar_si_short.xml"; 
    $xml = file_get_contents($xml_string); 

    // Extract relevant section out of the file 
    $start_pos = strpos($xml, "timeline:") + strlen("timeline:"); 
    $end_pos = strpos($xml, "});"); 
    $json = substr($xml, $start_pos, $end_pos - $start_pos); 

    // Some string replace operations to bind the keys and values within " (double quotes) 
    $json = preg_replace("/(,[a-z]+)/", '"$1', $json); 
    $json = preg_replace("/([a-z]+)(:)/", '"$1"$2"', $json); 
    $json = str_replace('}', '"}', $json); 

    // echo $json; // This string is now in decodable json format 
    $arr = json_decode($json, true); 
    var_dump($arr); 
    return; 
?> 
+0

這就是我一直在尋找...我修改了一下,現在是完美的!謝謝。 – Jakadinho 2014-10-01 11:13:43

0

使用:

$xml=simplexml_load_file("http://meteo.arso.gov.si/uploads/probase/www/plus/timeline/timeline_radar_si_short.xml"); 

不使用json_decode

+0

我試過$ url = file_get_contents(「http://meteo.arso.gov.si/uploads/probase/www/plus/timeline/timeline_radar_si_short.xml」); $ xml = simplexml_load_string($ url); print_r($ xml);但它不起作用。它給了我SimpleXMLElement對象() – Jakadinho 2014-09-30 10:47:38

0

這個xml似乎不是一個有效的。 它不包含任何DTD對數據的規則,甚至標準<?xml..標籤,就像這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE note SYSTEM "Note.dtd"> 
... 

它還包含的JavaScript代碼。 SimpleXML無法解析它(空數組)。

如果你可以調用它持有的JavaScript,這樣做:

$data = file_get_contents("http://meteo.arso.gov.si/uploads/probase/www/plus/timeline/timeline_radar_si_short.xml"); 
$data = str_replace(array('<?xml version="1.0" encoding="utf-8"?><pujs><![CDATA[',']]></pujs>'),"",$data); 
echo '<script type="text/javascript">'.$data."</script>";