You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用SimpleXML遍历XML中brand节点输出为空怎么解决

问题原因
  • 第一,你的XML文件语法不合法:XML规定只能存在1个顶层根节点,你当前的XML中<brands>和<producers>是并列的两个顶层节点,simplexml_load_file加载时只会解析第一个顶层节点<brands>,返回的$xml对象本身就对应<brands>节点,而非整个文档的虚拟根。
  • 第二,遍历路径错误:你写的$xml->brands->brand相当于在<brands>节点下再找子节点<brands>,这个路径不存在,拿到的对象本身不是你预期的<brand>节点集合。
  • 第三,输出逻辑错误:<brand>是包含多个子节点的复合节点,本身没有直接的文本内容,直接将其作为字符串输出必然得到空值。
解决方法
  1. 先修正XML格式,给所有内容套一个统一的顶层根节点,示例如下:
<?xml version='1.0' encoding='UTF-8'?>
<data>
    <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>
            <!-- 原有producers下的内容 -->
        </producer>
    </producers>
</data>
  1. 修改PHP遍历代码,修正路径和输出逻辑:
<?php
$xml = simplexml_load_file('demo.xml');

// 正确遍历brands下的所有brand节点
foreach ($xml->brands->brand as $index => $brand) {
    // 单独访问指定字段
    echo "品牌名称:" . $brand->name . PHP_EOL;
    echo "品牌官网:" . $brand->url . PHP_EOL;

    // 若要遍历当前brand下所有子字段,可嵌套循环
    foreach ($brand->children() as $fieldName => $fieldValue) {
        echo "字段名:$fieldName - 字段值:$fieldValue" . PHP_EOL;
    }
}
?>

如果不想修改XML文件,也可以直接适配现有的加载结果,把遍历代码改成foreach ($xml->brand as $key => $brand)即可,因为原XML加载后$xml本身就是<brands>节点。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:42:00