0

API をクエリして simplexml オブジェクトを取得する codeigniter アプリがあります。simplexml オブジェクトから必要な値をハードコーディングしましたが、後でオブジェクトの構造が常に同じであるとは限らないことがわかったので、キャストを使用して必要な値を取得することはできません。

「classid」を使用して値を取得できるように、これに使用できる array_search のような関数はありますか? 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] を使用する必要があることです。これは、数値キー (?) のデータが変更される場所が一貫しているためです。

4

2 に答える 2

0

XPathを使用する

特定の要素を検索できるだけでなく、さまざまな軸を使用してあらゆる種類のクレイジーな検索を実行できます。

于 2012-05-15T00:11:51.683 に答える
0

これは機能するはずですが、生の XML なしでテストする方法がありません。

$rates = array();

foreach ($usps->Package->Postage as $postage)
    $rates[$postage->attributes()->CLASSID] = $postage->Rate;
于 2012-05-14T23:29:05.183 に答える