simplexml_load_string无法加载XML / No error / result not === false

时间:2017-06-07 15:55:17

标签: php xml xml-parsing

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”

知道我做错了什么吗? 我必须添加一些文本,因为它显然是代码而且不可理解。现在?现在?现在?现在?

1 个答案:

答案 0 :(得分:2)

print_r()(默认情况下)不会返回输出,而是打印输出 - 因此您无法在字符串上下文中使用它。如果你想这样做,你可以传递一个truthy值作为第二个参数,让它返回输出而不是打印它:

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