2017-06-07 10 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()(デフォルト)は出力を返しません。出力するので、文字列のコンテキストで使用することはできません。それをしたい場合は、2番目のパラメータとしてtrueyの値を渡して、出力する代わりに出力を返すようにすることができます:

$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

Nope - docsはうまく見えます。彼らは出力をSTDOUTに出力しています。それをキャプチャしてログに送信しようとしています。 –

関連する問題