Как правильно разобрать объект SimpleXML в PHP? - PullRequest
1 голос
/ 25 февраля 2010

Я использую класс CloudFusion для получения данных Amazon.com, и мой код прост:

<code>$items = $pas->item_search( "shoes", array( 
    "ResponseGroup" => "Small", 
    "SearchIndex" => "Blended" ));
$items = $items->body->Items;
echo "<pre>";
print_r( $items );
echo "
";

Возвращает следующее:

SimpleXMLElement Object (
    [Request] => SimpleXMLElement Object
        (
            [IsValid] => True
            [ItemSearchRequest] => SimpleXMLElement Object
                (
                    [Keywords] => shoes
                    [ResponseGroup] => Small
                    [SearchIndex] => Blended
                )

        )

    [TotalResults] => 737435
    [TotalPages] => 245816
    [SearchResultsMap] => SimpleXMLElement Object
        (
            [SearchIndex] => Array
                (
                    [0] => SimpleXMLElement Object
                        (
                            [IndexName] => Kitchen
                    ....
        )

    [Item] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [ASIN] => B0001Z95QY
                    [DetailPageURL] => http://www.amazon.com/Household-Essentials-MS6030-Seasonal-Storage/dp/B0001Z95QY%3FSubscriptionId%3D0WASFFPR5B82TH4ZQB82%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB0001Z95QY
                    [ItemLinks] => SimpleXMLElement Object
                        (
                            [ItemLink] => Array
                                (
                                    [0] => SimpleXMLElement Object
                                        (
                                            [Description] => Technical Details
                                            [URL] => http://www.amazon.com/Household-Essentials-MS6030-Seasonal-Storage/dp/tech-data/B0001Z95QY%3FSubscriptionId%3D0WASFFPR5B82TH4ZQB82%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB0001Z95QY
                                        ) ....................
                )

            [1] => SimpleXMLElement Object
                (
                    [ASIN] => B001ACNBZ8
                    [DetailPageURL] => http://www.amazon.com/Peet-Shoe-Dryer-Boot-Original/dp/B001ACNBZ8%3FSubscriptionId%3D0WASFFPR5B82TH4ZQB82%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB001ACNBZ8
                    [ItemLinks] => SimpleXMLElement Object
                        (...................
        )

)

Что я хотел бы сделать, так это перейти на уровень «Предмет», а затем запустить foreach, чтобы получить каждую отдельную запись. Я попытался $items = $items->Item, но это возвращает только первую запись.

Есть идеи?

1 Ответ

0 голосов
/ 25 февраля 2010

Прежде всего, вам следует избегать использования print_r () в SimpleXMLElement, вместо этого просто взгляните на XML с помощью asXML (). Это также то, что вы должны публиковать здесь, вместо вывода print_r ().

Я не могу расшифровать код, который вы опубликовали, поэтому я сделаю дикое предположение и предложу вам попробовать что-то вроде:

foreach ($items->body->Items->Item as $Item)
{
}

В любом случае, если вы хотите что-то перебрать, foreach - это ответ.

...