Bir SimpleXMLElement nesnesi döngü veya bir diziye şeyi dönüyor

3 Cevap php

Ben bir iade SimpleXML nesne olsa yineleme nasıl çalışmak çalışıyorum.

Ben Amazon Web Services (SimpleDB, S3, EC2, vb) bağlanır Tarzan AWS denilen bir araç seti kullanıyorum. Ben özellikle SimpleDB kullanıyorum.

Ben Amazon SimpleDB hizmete verileri koyabilirsiniz, ve ben onu geri alabilirsiniz. Ben sadece döndürülen SimpleXML nesneyi nasıl işleneceğini bilmiyorum.

Tarzan AWS belgelerine bu diyor ki:

Yanıt başlıkları ve vücuda gezinmek için yanıt bakmak. Bu bir nesne değil, bir dizidir ve vücut SimpleXML nesne olduğunu unutmayın.

Burada döndürülen SimpleXML nesne bir örnek:

 [body] => SimpleXMLElement Object
        (
            [QueryWithAttributesResult] => SimpleXMLElement Object
                (
                    [Item] => Array
                        (
                            [0] => SimpleXMLElement Object
                                (
                                    [Name] => message12413344443260
                                    [Attribute] => Array
                                        (
                                            [0] => SimpleXMLElement Object
                                                (
                                                    [Name] => active
                                                    [Value] => 1
                                                )

                                            [1] => SimpleXMLElement Object
                                                (
                                                    [Name] => user
                                                    [Value] => john
                                                )

                                            [2] => SimpleXMLElement Object
                                                (
                                                    [Name] => message
                                                    [Value] => This is a message.
                                                )

                                            [3] => SimpleXMLElement Object
                                                (
                                                    [Name] => time
                                                    [Value] => 1241334444
                                                )

                                            [4] => SimpleXMLElement Object
                                                (
                                                    [Name] => id
                                                    [Value] => 12413344443260
                                                )

                                            [5] => SimpleXMLElement Object
                                                (
                                                    [Name] => ip
                                                    [Value] => 10.10.10.1
                                                )

                                        )

                                )

                            [1] => SimpleXMLElement Object
                                (
                                    [Name] => message12413346907303
                                    [Attribute] => Array
                                        (
                                            [0] => SimpleXMLElement Object
                                                (
                                                    [Name] => active
                                                    [Value] => 1
                                                )

                                            [1] => SimpleXMLElement Object
                                                (
                                                    [Name] => user
                                                    [Value] => fred
                                                )

                                            [2] => SimpleXMLElement Object
                                                (
                                                    [Name] => message
                                                    [Value] => This is another message
                                                )

                                            [3] => SimpleXMLElement Object
                                                (
                                                    [Name] => time
                                                    [Value] => 1241334690
                                                )

                                            [4] => SimpleXMLElement Object
                                                (
                                                    [Name] => id
                                                    [Value] => 12413346907303
                                                )

                                            [5] => SimpleXMLElement Object
                                                (
                                                    [Name] => ip
                                                    [Value] => 10.10.10.2
                                                )

                                        )

                                )

                        )

Peki kod ben nesne öğelerin her birinden almak gerekiyor? Onlardan her döngü gibi ve döndürülen mySQL sorgu gibi idare ediyorum. Örneğin, ben SimpleDB sorgulamak ve sonra SimpleXML yüzden sayfada sonuçlarını görüntülemek olsa döngü olabilir.

Alternatif olarak, nasıl bir diziye bütün mesele çevirirsiniz?

Ben SimpleXML yeniyim, bu yüzden benim sorular yeterince spesifik değilse özür dilerim.

3 Cevap

Bir foreach döngüsü SimpleXMP nesne (ya da özelliklerini) kullanılabilir. Eğer döngü istiyorsanız bütün bu gibi kayıtları 'bir şey verilere erişmek ve görüntülemek için kullanılabilir:

//Loop through all the members of the Item array 
//(essentially your two database rows).
foreach($SimpleXML->body->QueryWithAttributesResult->Item as $Item){
    //Now you can access the 'row' data using $Item in this case 
    //two elements, a name and an array of key/value pairs
    echo $Item->Name;
    //Loop through the attribute array to access the 'fields'.
    foreach($Item->Attribute as $Attribute){
        //Each attribute has two elements, name and value.
        echo $Attribute->Name . ": " . $Attribute->Value;
    }
}

O $ Öğe $ Özellik olarak, bir SimpleXML nesne olacak, bu yüzden nesneler değil, diziler olarak başvurulan gerekir unutmayın.

Yukarıdaki örnek kod SimpleXML nesnesinin ($ SimpleXML-> body-> QueryWithAttributesResult-> Ürün), sen de bir SimpleXMLElement nesnesi aracılığıyla döngü (diyelim $ SimpleXML-> body-> QueryWithAttributesResult-> Ürün [içinde diziler döngü ise 0]), ve size nesnenin özelliklerinin her biri verecekti.

Bir SimpleXMLElement nesnesinin her alt öğesi bir XML varlıktır. XML varlık (tag) benzersiz değilse, o zaman elemanı basitçe her varlığı temsil SimpleXML nesneleri bir dizidir.

İsterseniz, bu SimpleXML nesneden daha yaygın bir satır / alanları dizi oluşturmak (veya yakın olsun) olmalıdır:

foreach($SimpleXML->body->QueryWithAttributesResult->Item as $Item){
    foreach($Item->Attribute as $Attribute){
        $rows[$Item->Name][$Attribute->Name] = $Attribute->Value;
    }
}

//Now you have an array that looks like:
$rows['message12413344443260']['active'] = 1;
$rows['message12413344443260']['user'] = 'john';
//etc.

PHP 5.2 düzeltme için bir hafif ek.

$response_array = json_decode(json_encode($response),true);

(Amazon'un / Tarzan gibi) CDATA bölümleri içerir YAPMAYIN XML yanıtların durumda, PHP 5.2 veya daha yeni olduğunu varsayarak aşağıdaki kullanabilirsiniz.

// Get a SimpleXML response back from Tarzan
$s3 = new AmazonS3();
$response = $s3->list_buckets();

// Convert SimpleXML to Array in PHP 5.2.
$response_array = json_decode(json_encode($response));

Bu Tarzan (CloudFusion 2.5) bir sonraki sürümünde tüm nesneler için geçerli standart bir yardımcı olacaktır.