如何用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
相关产品推荐
相关产品推荐

