是否有类似“array_search”的函数用于simplexml对象

时间:2012-05-14 23:15:42

标签: php codeigniter simplexml

我有一个codeigniter应用程序,可以查询api并获取一个simplexml对象。我已经从simplexml对象硬编码了我想要的值,但后来发现对象的结构并不总是相同的,所以我不能使用强制转换来获取我需要的值。

我是否可以使用类似array_search的函数,因此我可以使用" classid"获得价值?以下是simplexml对象的示例:

    [Package] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [ID] => e981b9a72cd305c7d97cc530ef9b3015
            )

        [Postage] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [CLASSID] => 3
                            )

                        [MailService] => Express Mail<sup>&reg;</sup>
                        [Rate] => 57.60
                    )

                [1] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [CLASSID] => 2
                            )

                        [MailService] => Express Mail<sup>&reg;</sup> Hold For Pickup
                        [Rate] => 57.60
                    )

                [2] => SimpleXMLElement Object
                    (
                        [@attributes] => Array
                            (
                                [CLASSID] => 55
                            )

                        [MailService] => Express Mail<sup>&reg;</sup> Flat Rate Boxes
                        [Rate] => 39.95
                    )

我用它来获取[Rate]值:

$usps->Package->Postage[0]->Rate

问题是我需要使用[CLASSID],因为数字键(?)中的数据会发生变化,这是一致的。

2 个答案:

答案 0 :(得分:0)

这应该可行,但如果没有原始XML,我无法测试它:

$rates = array();

foreach ($usps->Package->Postage as $postage)
    $rates[$postage->attributes()->CLASSID] = $postage->Rate;

答案 1 :(得分:0)

使用XPath

您不仅可以搜索特定元素,还可以使用各种轴进行各种疯狂搜索。