2013-10-10 16 views
0

由於某種原因,此操作給了我一個「無效的返回格式」。如何使loadXML加載我的XML文件?

$dom = new DomDocument('1.0', 'utf-8'); 
$ret = @$dom->loadXML($data); 
if (! $ret) { 
    $_SESSION['error'] = 'invalid returned format'; 
    return false; 
} 

我使用$數據= curl_exec($插座)來檢索鏈接到XML文件,我能夠用這個動作來呼應文件的內容類型,所以該文件存在:

if (strpos($content_type, 'text/xml') === FALSE) { 
    $_SESSION['error'] = 'invalid returned format'; 
    return false; 
} 

我怎樣才能讓它不錯?

謝謝!

額外的代碼:

curl_setopt($socket, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($socket, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($socket, CURLOPT_CONNECTTIMEOUT, 15); 
curl_setopt($socket, CURLOPT_TIMEOUT, (15+5)); 
curl_setopt($socket, CURLOPT_SSL_VERIFYHOST, 2); 
$data = curl_exec($socket); 
$code = curl_getinfo($socket, CURLINFO_HTTP_CODE); 
$content_type = curl_getinfo($socket, CURLINFO_CONTENT_TYPE); 
curl_close($socket); 

if ($code != 200) { 
    $_SESSION['error'] = 'Unable to talk to sm'; 
    return false; 
} 

if (strpos($content_type, 'text/xml') === FALSE) { 
    $_SESSION['error'] = 'invalid returned format'; 
    return false; 
} 

$dom = new DomDocument('1.0', 'utf-8'); 
$ret = @$dom->loadXML($data); 
if (! $ret) { 
    $_SESSION['error'] = 'invalid returned format'; 
    return false; 
} 

if ($dom->documentElement->nodeName != 'user') { 
    $_SESSION['error'] = 'authentication issue'; 
    return false; 
} 

XML代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<user login="myfile"> 
    <application id="10" name="test" description="test"> … </application> 
    </user> 

XML渲染FILE

$applications = $user->applications(); 


header('Content-Type: text/xml; charset=utf-8'); 
$dom = new DomDocument('1.0', 'utf-8'); 

$user_node = $dom->createElement('user'); 
$user_node->setAttribute('login', $user->getAttribute('login')); 

    foreach ($applications as $application) { 
    $application_node = $dom->createElement('application'); 
    $application_node->setAttribute('id', $application->getAttribute('id')); 
    $application_node->setAttribute('name', $application->getAttribute('name')); 
    $application_node->setAttribute('description',  $application->getAttribute('description')); 
    foreach ($application->getMimeTypes() as $mimetype) { 
     $mimetype_node = $dom->createElement('mime'); 
     $mimetype_node->setAttribute('type', $mimetype); 
     $application_node->appendChild($mimetype_node); 
    } 
    $user_node->appendChild($application_node); 
} 

$dom->appendChild($user_node); 

echo $dom->saveXML(); 
exit(0); 
+0

我看到你正在檢查內容類型。聽起來就像你可能正在獲取包含頭文件的文件,這將使其成爲一個無效的XML。如果沒有,你需要發佈更多的代碼,包括curl部分。 –

+0

我粘貼了一些額外的代碼! –

回答

0

這是最LIK ely application/xml而不是text/xml(除非您手動將標題設置爲該服務器或您的服務器,出於某種奇怪的原因,它是否與text/xml關聯)。

如果不是這種情況,您的問題是您嘗試訪問的文件的XML格式無效。用一些在線XML驗證器檢查它,或在Chrome或Firefox中使用它,它會顯示你的synax錯誤。

對未來的一些建議:

  1. ,你是否嘗試打印您$content_type變量 - 因爲如果你有,你可以調試它在幾分鐘自己嗎?
  2. 您應該區分2個相同的「無效返回格式」消息,以便您知道哪一行代碼會給出錯誤。

希望有所幫助。

+0

如果你給傳入的XML一個頭部''??xml version =「1.0」standalone =「no」?>' – MackieeE

+0

@MackieeE - 它實際上有一個來自curl的字符串,所以它不是答案。 –

+0

@我 - 好點,oops :)好吧,我不知道'simple_xml_load_string'是否帶來了同樣的錯誤?那麼對於某個形式很糟糕的XML來說,它是100%。 – MackieeE