首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

一个接口,能得到返回的xml文件,怎么提取有用的内容

2013-04-20 
一个接口,能得到返回的xml文件,如何提取有用的内容?接口调用后,$result 能得到以下内容:stdClass Object(

一个接口,能得到返回的xml文件,如何提取有用的内容?
接口调用后,$result= 能得到以下内容:

stdClass Object
(
    [out] => <?xml version="1.0" encoding="GB2312"?>
<result>
 <flights>
 <flight orgCity="SHA" departTerm="T2" dstCity="CAN" arrivalTerm="--" airComp="MU" flightno="MU5307" planeType="320" startTime="2012-07-20 07:30" endTime="2013-07-20 09:50" stopNumber="0" mealCode="S">
<cabins><cabin cabinCode="Y" cabinType="0" cabinDiscount="100" cabinName="经济舱" cabinSales="A" ibePrice="1280" encryptString="79fccacuigjjdskf" /></cabins>
<cabin cabinCode="A" cabinType="0" cabinDiscount="250" cabinName="头等折扣舱" cabinSales="A" ibePrice="2830" encryptString="1c9cc629e7f7b1a" ></cabin>
? </flight>
</flights>
? <is_success>T</is_success>
</result>
)

以前做这直接读取 xml的,可这种带了一个stdClass Object(  [out] =>

不知道应该如何读到各节点内容了

[解决办法]
如果你对对象操作不熟悉,可以先转换为数组,这样会方便一些。
你获取的对象很简单, $result->out 就是这个XML字符串,若是想提取其中的内容,可以尝试字符串提取,或者解析XML为对象再转数组(推荐)。

http://www.php.net/manual/zh/language.oop5.properties.php


[解决办法]
直接打印
echo $result->out;

作为xml解析
$xml = simplexml_load_string($result->out);
print_r($xml);
SimpleXMLElement Object
(
    [flights] => SimpleXMLElement Object
        (
            [flight] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [orgCity] => SHA
                            [departTerm] => T2
                            [dstCity] => CAN
                            [arrivalTerm] => --
                            [airComp] => MU
                            [flightno] => MU5307
                            [planeType] => 320


                            [startTime] => 2012-07-20 07:30
                            [endTime] => 2013-07-20 09:50
                            [stopNumber] => 0
                            [mealCode] => S
                        )

                    [cabins] => SimpleXMLElement Object
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [@attributes] => Array
                                        (
                                            [cabinCode] => Y
                                            [cabinType] => 0
                                            [cabinDiscount] => 100
                                            [cabinName] => 经济舱
                                            [cabinSales] => A
                                            [ibePrice] => 1280
                                            [encryptString] => 79fccacuigjjdskf


                                        )

                                )

                        )

                    [cabin] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (
                                    [cabinCode] => A
                                    [cabinType] => 0
                                    [cabinDiscount] => 250
                                    [cabinName] => 头等折扣舱
                                    [cabinSales] => A
                                    [ibePrice] => 2830
                                    [encryptString] => 1c9cc629e7f7b1a
                                )

                        )

                )

        )

    [is_success] => T
)


[解决办法]
$xml = simplexml_load_string($result->out);
// 转换对象所有属性为数组
function obj2arr($obj)
{
    $arr = get_object_vars($obj);


    foreach($arr as &$child){
        is_object($child) && ( $child = obj2arr($child) );
    }
    return $arr;
}
$data = obj2arr($xml);


接着你就可以用 
$data['flights']['flight']['cabin']['@attributes']['cabinName'];
得到 头等折扣舱 

当然,不转换为数组也是可以直接操作的,不过这就需要考验你的基本功
[解决办法]
$result->out = str_replace('encoding="GB2312"', 'encoding="utf-8"', iconv('gbk', 'utf-8', $result->out));

热点排行