2012-02-15 61 views
0

我有一個從XML文件檢索到的XML字符串。我無法直接使用simplexml_load_file()訪問文件。原因是我必須通過Amazon S3 getObject()來獲取此信息。當我echo字符串,我可以看到作爲一個真正的XML文件。但是當我嘗試使用波紋管代碼將它加載到XML對象時,它不起作用。變量$s3Data完全包含給定鏈接中的XML內容。PHP simplexml_load_string不工作

$xml = simplexml_load_string($s3Data); 

我需要你的幫助來解決這個問題。我得到的XML字符串可以在這裏找到。

http://mediatheques-aphp.bibliomedias.net/12.xml

編輯

我創建的XML字符串和測試。現在我得到以下錯誤。我該如何解決這些問題。

警告:simplexml_load_string()[function.simplexml負荷字符串]: 實體:線12:分析器錯誤:輸入是不正確的UTF-8,表明 編碼!字節:0xEF 0x76 0x65在爲0x3C C:\程序 文件\ Zend的\的Apache2 \ htdocs中\ voxmedia \應用\模塊\進口\控制器\ NaiveController.php 上線1458

警告:simplexml_load_string()[function.simplexml -load字符串]: 2009用C幼稚:\程序 文件\ Zend的\的Apache2 \ htdocs中\ voxmedia \應用\模塊\進口\控制器\ NaiveController.php 上線1458

警告:simplexml_load_string()[ C:\ Program Files \ Zend \ Apache2 \ htdocs \ voxmedia \ application \ modules \ import \ controllers \ NaiveController.php 上線1458

OK現在我覺得這個問題是與排序字符串編碼或東西。有沒有什麼辦法解決這一問題?

謝謝。

+0

它「不起作用」是永遠不夠的信息。至少提供錯誤信息。 – Gordon 2012-02-15 08:52:56

+0

嗨。沒有錯誤消息。我的代碼與其他XML字符串一起工作。請不要考慮文件。只是認爲你有一個php字符串變量,它具有給定URL的內容。 '$ s3Data'是一個字符串變量,它包含給定XML文件中的東西。不要考慮getObject()等... – 2012-02-15 09:03:37

+0

我修改了我的問題與最新的更新。請檢查。 – 2012-02-15 09:17:03

回答

1

我可以通過一個小的解決方法找到我的問題的答案。 simplexml_load_string()不斷顯示編碼錯誤。所以我用simplexml_load_file()作爲波紋管。我已將文件保存到本地,然後使用simplexml_load_file()加載。

$tempLocalPath = "temp/data.xml"; 
file_put_contents($tempLocalPath, $s3Data); 
$xml = simplexml_load_file($tempLocalPath); 

但是我仍然不understan爲什麼simplexml_load_string()無法解析同樣的事情。

-1

當您調用一個實際上是對象的變量時,將調用__toString()方法將該對象轉換爲字符串,但是當您傳遞該對象以使該對象沒有被轉換時,該對象被調用。

用途:

$xml = simplexml_load_string((string)$s3Data); 

鑄就$ s3Data對象的字符串。

PS: 使用var_dump($ s3Data)和var_dump($ xml)調試變量的內容而不是echo。

+0

沒有鑄造沒有工作。我試過了。我的代碼與其他XML字符串一起工作。請不要考慮文件。只要認爲你有一個PHP字符串變量,它具有給定文件的內容。 – 2012-02-15 09:00:19

+0

不正確:http://codepad.viper-7.com/kv8PgD – Gordon 2012-02-15 09:00:20

+0

奇怪的使用$ xml = simplexml_load_string(file_get_contents('http://mediatheques-aphp.bibliomedias.net/12.xml'));在我的機器上工作,沒有任何xml錯誤。 – 2012-02-15 09:09:05

4

simplexml_load_stringsimplexml_load_file是錯誤的,並且對於帶有複雜標記的XML不能很好地工作。 我試了兩個函數來解析一些有效的XML SOAP響應,甚至無法獲得錯誤消息。 我不得不使用DOMDocument(像魅力一樣工作)。

下面是我們如何想檢查simplexml的錯誤(如果你是幸運的看到了錯誤,而不是隻是「假」,從函數返回)

libxml_use_internal_errors(true); 
$xml=simplexml_load_string($myXMLData); //or simplexml_load_file 

foreach(libxml_get_errors() as $error) { 

    print_r($error); 

} 
+0

哦,天啊,親切!我一直試圖用'simplexml_load_string'加載SOAP請求字符串的結果,並堅持只是不工作(沒有任何錯誤)。感謝'DOMDocument'參考,讓我的一天! – 2015-07-17 08:52:59

0

你應該試試這個:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch); 
curl_close($ch); 
simplexml_load_string($result);