Ключ чтения / пары SimpleXML для чтения - PullRequest
0 голосов
/ 04 июля 2011

Я уверен, что что-то подобное произойдет раньше, но я изо всех сил пытаюсь найти то, что я ищу здесь вообще. Я читал предыдущие ответы здесь много раз, но никогда раньше не спрашивал и не отвечал сам!

Я использую SimpleXML для чтения ответа на запрос Amazon SimpleDB, и результат находится в форме;

<Item>
    <Name>Item 1</Name>
    <Attribute>
        <Name>Title</Name>
        <Value>Item 1 Title</Value>
    </Attribute>
    <Attribute>
        <Name>URL</Name>
        <Value>Item 1 URL</Value>
    </Attribute>
    <Attribute>
        <Name>Description</Name>
        <Value>Item 1 Description</Value>
    </Attribute>
    <Attribute>
        <Name>Site</Name>
        <Value>Item 1 Site</Value>
    </Attribute>
</Item>
<Item>
    <Name>Item 2</Name>
    <Attribute>
        <Name>Title</Name>
        <Value>Item 2 Title</Value>
    </Attribute>
    <Attribute>
        <Name>URL</Name>
        <Value>Item 2 URL</Value>
    </Attribute>
    <Attribute>
        <Name>Description</Name>
        <Value>Item 2 Description</Value>
    </Attribute>
    <Attribute>
        <Name>Site</Name>
        <Value>Item 2 Site</Value>
    </Attribute>
</Item>

У меня нет проблем с чтением «Имени» в верхней части элемента, используя foreach () в PHP, чтобы вывести их все, и мне удалось сделать то же самое, чтобы создать список «Ключ / Значение». пар для просмотра списка.

Я не могу понять, как выбрать, например, конкретное значение описания, чтобы разместить его там, где я хочу на странице.

Выбор Item-> Attribute дает массив в форме;

[Name] -> Title
[Value] -> Item 1 Title

И вот тут я немного застрял. Все еще в рамках моего существующего foreach (), циклически перебирающего элементы, я хочу получить массив «Атрибутов», чтобы я мог выбрать, например;

[Title] -> Item 1 Title
[URL] -> Item 1 URL

и т. Д.

Я в порядке, выбирая предметы и повторяя их названия, но это действительно так далеко, как я получаю.

Поскольку это такой вопрос новичка, я уверен, что его уже задавали или отвечали раньше, я не вижу ответа где-либо еще, поэтому, если кто-то может указать мне один, я был бы очень благодарен!

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 04 июля 2011

В цикле foreach создайте новый цикл foreach для создания массива атрибутов.

что-то вроде

<?php

foreach($items as $item)
{
    $attributes = array();

    foreach($item->Attribute as $attribute)
    {
        $attributes[$attribute->Name] = $attribute->Value;
    }

    echo 'Item name:'.$item->Name.'<br />';
    echo 'Item attribute URL:'.$attributes['URL'].'<br />';
    echo 'Item attribute Description:'.$attributes['Description'].'<br />';
}

?>

примечание: не проверено, при необходимости отрегулируйте

0 голосов
/ 04 июля 2011

Я пытался это сделать некоторое время назад для интеграции твиттера на сайт.

Я нашел кусок кода при поиске XML2ARRAY. Как вы, вероятно, можете догадаться, это превращает данные XML в многомерный массив, который вы можете использовать для загрузки заголовка FOREACH или просто именованных вызовов массива, если вы знаете заголовок элемента.

Затем вы можете заставить его проверять, что каждый раз, когда он попадает на элемент с именем ATTRIBUTE, он сохраняет эти данные в новый массив, используя NAME в качестве ключа и VALUE в качестве значения, а затем просто сбрасывает ATTRIBUTE, когда закончите ( для лучшей обработки памяти) и установки нового ключа в этом массиве нового массива значений.

Надеюсь, что поможет

...