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

如何用PHP+MySQL通过SimpleXML生成指定结构的XML响应?

使用PHP SimpleXML生成嵌套XML响应

当然可以用SimpleXML实现,比直接echo字符串更规范易维护,下面是具体实现步骤和代码示例:

1. 初始化SimpleXML对象

首先创建XML根节点,同时指定XML版本和编码:

// 创建根节点,同时生成XML声明
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><workers></workers>');

2. 遍历工人数据并构建节点

循环$data_workers,为每个工人创建<worker>子节点,并添加id和name元素;再根据worker_id匹配对应的工作记录,嵌套到工人节点下:

// 先把工作记录按worker_id分组,提升匹配效率
$worksGrouped = [];
foreach ($data_works as $work) {
    $worksGrouped[$work->worker_id][] = $work;
}

foreach ($data_workers as $worker) {
    // 创建worker节点
    $workerNode = $xml->addChild('worker');
    $workerNode->addChild('id', $worker->id);
    // 转义特殊字符避免XML解析报错
    $workerNode->addChild('name', htmlspecialchars($worker->name));

    // 添加该工人的工作记录节点
    $worksNode = $workerNode->addChild('works');
    if (isset($worksGrouped[$worker->id])) {
        foreach ($worksGrouped[$worker->id] as $work) {
            $workNode = $worksNode->addChild('work');
            $workNode->addChild('id', $work->id);
            $workNode->addChild('date', $work->date);
        }
    }
}

3. 输出XML响应

设置正确的HTTP响应头,然后输出最终XML内容:

header('Content-Type: application/xml; charset=utf-8');
echo $xml->asXML();

关键注意点

  • 必须用htmlspecialchars()处理包含特殊字符(如&、<、>)的文本内容,否则会导致XML格式无效
  • 如果目标XML结构需要用属性(比如<worker id="1">),改用$workerNode->addAttribute('id', $worker->id)即可
  • 提前对工作记录按worker_id分组,避免嵌套循环的性能损耗,数据量大时效果更明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:10:05