【问题标题】:Getting multiple values with specific attributes in nested xml with php使用php在嵌套xml中获取具有特定属性的多个值
【发布时间】:2015-11-18 22:05:09
【问题描述】:

我觉得这应该很容易,但出于对它的热爱,我无法做到正确。我已经阅读和测试了几个小时,尝试了我在互联网上找到的不同方法,包括 simpleXML 和 PHP XML DOM,但它们都不是我需要的。

在调整和组合了一些答案之后,我有点接近了(我什至找不到回去的路,因为我在这里经历了这么多),但并不完全正确。

我的代码:

$xml = simplexml_load_file(all_objects.xml");

$image = $xml->xpath('/objects/object/images/image');
foreach($image as $node) {
    $id = (string) $node->field[0];
    $url = (string) $node->field[4];
    echo $id . " : " . $url . "<br>";
}

但我不想使用它们出现在 [4] 中的键/数字,而是使用字段名称属性来定位,例如“id”和“image_url”,因为它们并不总是按这个顺序排列。

类似这样的:

$id = (string) $node->field["id"];

但它不起作用,我也尝试了 field->attribtues()->id,但没有运气。

xml:

<objects>
    <object>
        <field name="id">1055</field>
        <field name="title">example object</field>
        <images>
            <image number="1">
                <field name="id">55</field>
                <field name="version">1</field>
                <field name="image_url_small">http://example.com/image-small.jpg</field>
                <field name="image_url_medium">http://example.com/image-medium.jpg</field>
                <field name="image_url_big">http://example.com/image-big.jpg</field>
                <field name="image_url_original">http://example.com/image.jpg</field>
            </image>
            <image number="2">
                <field name="id">56</field>
                <field name="version">2</field>
                <field name="image_url">http://example.com/image2.jpg</field>
            </image>
            <image number="3">...</image>
            ...
            <image number="25">...</image>
        </images>
    </object>
    <object>...</object>
    <object>...</object>
</objects>

非常感谢任何帮助/指导!我正在为此失去理智。

【问题讨论】:

  • 这种事情正是整个世界似乎都在从 XML 转向 JSON 的原因。 :)

标签: php xml nested-loops


【解决方案1】:

您可以使用 XPath 获取具有特定属性值的子元素:

foreach($image as $node) {
    $id = (string) $node->xpath('field[@name="id"]')[0];
    $url = (string) $node->xpath('field[@name="image_url_big"]')[0];
    echo $id . " : " . $url . "<br>";
}

eval.in demo

输出:

55 : http://example.com/image-big.jpg
56 :
:
: 

【讨论】:

  • 非常感谢!像魅力一样工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多