2017-06-07 60 views
0

XML:simplexml_load_string無法加載XML /無錯誤/結果不===虛假

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<result sync="false" version="2"> 
    <action>start-subscription</action> 
    <action_result> 
     <code>103</code> 
     <detail>1 missing parameter</detail> 
     <missing_parameters> 
      <missing_parameter> 
       <key>operator</key> 
      </missing_parameter> 
     </missing_parameters> 
     <status>1</status> 
    </action_result> 
    <custom_parameters> 
     <custom_parameter> 
      <key>cp_REF</key> 
      <value>simpleLPADULTCHSMSV2___WoopGang------___Adjomo___external___paid___android___CH___WIFI___locale=fr_FR</value> 
     </custom_parameter> 
    </custom_parameters> 
    <customer> 
     <country>CH</country> 
     <language>en</language> 
    </customer> 
    <payment_parameters> 
     <channel>web</channel> 
     <method>OPERATOR</method> 
     <order>90330</order> 
    </payment_parameters> 
    <transactions> 
     <transaction> 
      <id>1308636894</id> 
      <status>-1</status> 
     </transaction> 
    </transactions> 
    <request_id>1591621_t593818e0f3913</request_id> 
    <reference>09045c8e-9ec1-4306-8699-5ac5306983b2</reference> 
</result> 

PHP:

$xml = file_get_contents("php://input"); 
    $datas = array(); 
    parse_str($xml, $datas); 
    $data = $datas['data']; 
    libxml_use_internal_errors(true); 

    $xml = simplexml_load_string($data); 

    if($xml === false){ 
     foreach(libxml_get_errors() as $error) { 
      $this->_logCall(self::LOG_DIMOCO, $error->message,"--"); 
     } 
    }else{ 
     $this->_logCall(self::LOG_DIMOCO, 'loaded simpleXML '.print_r($xml), ' --'); 
    }  

運行,在過去的ELSE結束,結果是 「1」

任何想法我做錯了什麼? 我不得不添加一些文字,因爲顯然它的主要代碼是不可理解的。現在呢?現在呢?現在呢?現在呢?

回答

2

print_r()(默認情況下)不返回輸出,它會打印它 - 所以你不能在字符串上下文中使用它。如果你想這樣做,你可以通過一個truthy值作爲第二個參數,讓它返回輸出而不是打印它:

$this->_logCall(self::LOG_DIMOCO, 'loaded simpleXML '.print_r($xml, true), ' --'); 
+0

我明白了,那看起來合法!現在嘗試並驗證您的答案 –

+0

完美的工作謝謝你。 所以關於文檔(http://php.net/manual/fr/function.simplexml-load-string.php) 我認爲他們犯了一個錯誤,因爲他們使用print_r($ xml); –

+1

不 - 文檔看起來不錯。他們將輸出打印到STDOUT。您正試圖捕獲它並將其發送到日誌。 –