我通过这样的xml获取产品数据。
<?xml version='1.0' encoding='UTF-8'?>
<brands>
<brand>
<name>Spielberger Mühle</name>
<kuerzel>SPI</kuerzel>
<id>e3124594-1d4c-4a72-8c66-37de394fece2</id>
<last_modified>27.04.2021 23:00:03</last_modified>
<logo>
<id>e3124594-1d4c-4a72-8c66-37de394fece2</id>
<name>SPI_Spielberger Mühle_e3124594-1d4c-4a72-8c66-37de394fece2.jpg</name>
<size>273981</size>
<mime_type>image/jpeg</mime_type>
<img_width>1533</img_width>
<img_height>676</img_height>
<last_modified>13.12.2016 12:48:02</last_modified>
</logo>
<url>www.spielberger-muehle.de</url>
<adr_invb_name>Spielberger GmbH</adr_invb_name>
<adr_invb_strasse>Burgermühle</adr_invb_strasse>
<adr_invb_plz>74336</adr_invb_plz>
<adr_invb_ort>Brackenheim</adr_invb_ort>
<adr_invb_land_id>8</adr_invb_land_id>
</brand>
</brands>
<producers>
<producer>
....和我的php (缩写为相关部分)
$xml = simplexml_load_file('demo.xml');
foreach ($xml->brands->brand as $key => $value) {
print "Key: $key - Value: $value\n";
}如果我试图遍历这个品牌,就会发生以下情况
Key: brand - Value: 编辑是因为我觉得我很会长篇大论。
发布于 2021-09-25 09:49:14
之所以会发生这种情况,是因为SimpleXMLElement如何处理它的迭代器。可以使用get_object_vars函数迭代元素。
foreach (get_object_vars($xml) as $key => $value) {
print "Key: $key - Value: $value\n";
}发布于 2021-09-25 11:12:36
请记住,SimpleXML做而不是会给您数组;问题中的所有输出都是对象,理解这些特定对象是如何工作的是关键。
特别是,该对象的设计允许您在具有相同名称的多个节点上进行迭代。在特定情况下,只有一个<brand>元素,但是库仍然允许循环,以防有时不止一个:
foreach ( $xml->brands->brand as $brandElement )这是您意外编写的循环;它只循环一次,因为有一个匹配的元素,关键是"brand",因为这是该元素的名称。您想要的实际对象是循环中的值。
因为您知道在您的情况下总是有一个匹配的元素,所以可以直接请求第一个元素:
$brandElement = $xml->brands->brand[0];如果您访问元素的子元素,这也是隐含的:
$brandName = $xml->brands->brand->name;
// short for $xml->brands[0]->brand[0]->name最后,可以使用->children()显式地获取元素的所有子元素的列表。
foreach ( $xml->brands->brand->children() as $name => $element )
// equivalent to foreach ( $xml->brands[0]->brand->children() as $name => $element )
// or foreach ( $xml->brands->brand[0] as $name => $element )https://stackoverflow.com/questions/69324625
复制相似问题