Цикл через объект SimpleXML или превращение всего этого в массив

Я пытаюсь выяснить, как выполнить итерацию, хотя возвращаемый объект SimpleXML.

Я использую инструментарий под названием Тарзан AWS, который подключается к веб-службам Amazon (SimpleDB, S3, EC2 и т. д.). Я специально использую SimpleDB.

Я могу поместить данные в сервис Amazon SimpleDB и я могу получить его обратно. Я просто не знаю, как обрабатывать возвращаемый объект SimpleXML.

в документации Tarzan AWS говорится следующее:

посмотрите на ответ для навигации по заголовкам и телу ответа. Обратите внимание, что это объект, а не массив, и что тело является объектом SimpleXML.

вот пример возвращаемого объекта SimpleXML:

 [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
                                                )

                                        )

                                )

                        )

Итак, какой код мне нужно получить через каждый из элементов объекта? Я хотел бы перебрать каждый из них и обработать его как возвращенный запрос mySQL. Например, я могу запросить SimpleDB, а затем выполнить цикл SimpleXML, чтобы я мог отображение результатов на странице.

альтернативно, как вы превращаете весь shebang в массив?

Я новичок в SimpleXML, поэтому прошу прощения, если мои вопросы недостаточно конкретны.

5 ответов


можно использовать


get_object_vars($simpleXMLElement);

одно небольшое дополнение для исправления PHP 5.2.

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

в случае ответов XML, которые не содержат разделов CDATA (например, Amazon/Tarzan), вы можете использовать следующее, Если у вас есть PHP 5.2 или новее.

// 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));

это будет стандартная утилита, доступная для всех объектов в следующей основной версии Tarzan (CloudFusion 2.5).


это работает:

// $result is a Simple XML object

$result = convertSimpleXMLToArray($result);

function convertSimpleXMLToArray($xml)
{
    if(class_basename($xml) == 'SimpleXMLElement')
    {
        $xml = get_object_vars($xml);
        foreach($xml as $key => $value)
        {
            if(class_basename($value) == 'SimpleXMLElement') $xml[$key] = convertSimpleXMLToArray($value);
        }
    }

    return $xml;
}