在嵌套 xml 和 php 中获取具有特定属性的多个值
Getting multiple values with specific attributes in nested xml with php
我觉得这应该很容易,但出于对它的热爱,我做不好。我已经阅读并测试了几个小时,尝试了我在互联网上发现的不同方法,包括简单的 XML 和 PHP XML DOM,但是 none其中的工作方式正是我需要的。
在调整和组合一些答案后,我有点接近了(我什至找不到返回的方式,因为我已经在这里经历了这么多),但并不完全正确。
我的代码:
$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>";
}
但是我不想使用 key/number 它们出现在 [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>
我真的很感激 help/guidance!我为此失去了理智。
您可以使用 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>";
}
输出:
55 : http://example.com/image-big.jpg
56 :
:
:
我觉得这应该很容易,但出于对它的热爱,我做不好。我已经阅读并测试了几个小时,尝试了我在互联网上发现的不同方法,包括简单的 XML 和 PHP XML DOM,但是 none其中的工作方式正是我需要的。
在调整和组合一些答案后,我有点接近了(我什至找不到返回的方式,因为我已经在这里经历了这么多),但并不完全正确。
我的代码:
$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>";
}
但是我不想使用 key/number 它们出现在 [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>
我真的很感激 help/guidance!我为此失去了理智。
您可以使用 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>";
}
输出:
55 : http://example.com/image-big.jpg
56 :
:
: