2011-10-27 135 views
0

我遇到了一些麻煩確定發生了什麼事情與simplexml_load_string()我用下面的代碼來呈現一些XML ....當我運行此代碼,我得到這樣的錯誤信息:SimpleXML拋出警告 - 如何捕獲?

Message: simplexml_load_string() [function.simplexml-load-string]: Entity: line 94: parser error : Opening and ending tag mismatch: meta line 15 and head 

任何想法上我如何能夠捕捉到這些警告? libxml_get_errors沒有任何影響。

   $response = simplexml_load_string($response); 
       var_dump($response); 
       if (count(libxml_get_errors()) > 0) { 
        print_r(libxml_get_errors()); 
       } 

       if (is_object($response)) { //returns true when warnings are thrown 
        //process response 
       } else { 
        //record error 
       } 
+0

您正在加載無效的.xml文件。也許把問題委託給提供它的人? – FailedDev

回答

11
libxml_use_internal_errors(true); // !!! 

$elem = simplexml_load_string($xml); 
if($elem !== false) 
{ 
    // Process XML structure here 
} 
else 
{ 
    foreach(libxml_get_errors() as $error) 
    { 
     error_log('Error parsing XML file ' . $file . ': ' . $error->message); 
    } 
} 
+0

此答案不會阻止警告,它只會顯示有關錯誤的更多信息。爲了防止出現警告,請在此答案中使用'set_error_handler()':http://stackoverflow.com/a/17012247/204842 –

+0

錯誤處理更糟糕。該警告提供了有關錯誤xml源部分的更多特定消息,而不是錯誤處理可以提供的信息。後者只顯示列,行,如果xml源文件沒有以好的格式編碼,很難找到錯誤部分。 –

0

在其中共享XML我的情況服務器改變了他們的HTTP到HTTPS。因爲我們正在下載舊的路徑XML文件,在這種情況下,它是「損壞」的。這就是我們錯誤的原因。

XML文件加載完美,因爲我沒有注意到https問題(瀏覽器重定向)。