SimpleXML读取键/值对

时间:2011-07-04 13:33:39

标签: php simplexml amazon-simpledb

我确信之前会有这样的事情发生,但我很难在这里找到我正在寻找的东西。我在这里已经多次阅读过以前的答案,但之前从未问过或回答过自己!

我正在使用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>

我在阅读项目顶部的'Name'时没有问题,使用PHP中的foreach()列出所有这些,我设法做同样的事情来创建一个'Key / Value列表'成对循环列表。

我无法弄清楚如何选择(例如)特定的描述值,将其放在我想要的页面中。

选择Item-&gt; Attribute会在表单中给出一个数组;

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

这就是我有点陷入困境的地方。仍然在我现有的foreach()循环遍历项目,我想要一个'属性'数组,所以我可以选择,例如;

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

等等。

我很好地选择了这些项目并回应了他们的名字,这一点真的是我得到的。

由于这是一个新手问题,我确信它之前已经被问过或回答过,我在其他地方看不到答案,所以如果有人能指出我,我会非常感激!

先谢谢

2 个答案:

答案 0 :(得分:1)

在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 />';
}

?>

注意:未经测试,根据需要进行调整

答案 1 :(得分:0)

我前一段时间尝试过将Twitter集成到网站中。

我在搜索XML2ARRAY时找到了一段代码。正如您可能猜到的,这会将XML数据转换为多维数组,如果您知道元素标题,则可以使用FOREACH或仅命名数组调用。

然后,您可以检查每次它命中一个名为ATTRIBUTE的元素,然后使用NAME作为键并将VALUE作为值将该数据保存到新数组,然后在完成时取消设置ATTRIBUTE(为了更好的内存处理)并在新数组值的数组中设置一个新键。

希望有所帮助