使用simplexml_load_string()

时间:2017-04-15 11:06:00

标签: php xml simplexml-load-string

当我在php中使用simplexml_load_string时:

$response = '<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
    <response xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
        <result code="1000">
            <msg>Command completed successfully</msg>
        </result>
        <resData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
            <domain:chkData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
                <domain:cd>
                    <domain:name normalized_name="dsfdsfdsfsdfdffdg"
                                 canonized_name="dsfdsfdsfsdfdffdg" tld="ir" avail="1">
                        dsfdsfdsfsdfdffdg.ir
                    </domain:name>
                </domain:cd>
            </domain:chkData>
        </resData>
        <trID>
            <clTRID>TEST-14922533391168726112</clTRID>
            <svTRID>IRNIC_2017-04-15T15:18:59+04:30_epi</svTRID>
        </trID>
    </response>
</epp>';
$a = simplexml_load_string($response);
var_dump($a);

当我显示$a时,我没有resData值,我错过了这个属性。 我怎样才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

您使用的是错误的变量$response,它根本没有初始化。使用包含完整html字符串而不是$result

$response

试试这个。 Code demo

<?php
$result = '<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
    <response xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
        <result code="1000">
            <msg>Command completed successfully</msg>
        </result>
        <resData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
            <domain:chkData xmlns:domain="http://epp.nic.ir/ns/domain-1.0">
                <domain:cd>
                    <domain:name normalized_name="dsfdsfdsfsdfdffdg"
                                 canonized_name="dsfdsfdsfsdfdffdg" tld="ir" avail="1">
                        dsfdsfdsfsdfdffdg.ir
                    </domain:name>
                </domain:cd>
            </domain:chkData>
        </resData>
        <trID>
            <clTRID>TEST-14922533391168726112</clTRID>
            <svTRID>IRNIC_2017-04-15T15:18:59+04:30_epi</svTRID>
        </trID>
    </response>
</epp>';
$a = simplexml_load_string($result);
var_dump($a);

答案 1 :(得分:0)

感谢@ splash58。
我应该像这样使用名称空间

$a = simplexml_load_string($result);
$ns = $a->getNamespaces(true);
var_dump($a->response->resData->children($ns['domain']));