如何在PHP脚本中将JSON响应数据转换为XML
在PHP中将JSON转换为XML的方法
没问题!在PHP里把JSON转成XML其实挺简单的,我给你两种常用的方法,适配不同的场景:
方法一:基于SimpleXML的基础转换(适合结构简单的JSON)
这种方法适合你提供的这种层级不深的JSON结构,步骤清晰易懂:
- 先把JSON字符串解码成PHP关联数组
- 初始化SimpleXML对象创建根节点
- 遍历数组,逐个生成XML节点和子元素
示例代码
// 假设你的JSON数据已经存在$json变量中 $json = '{ "data":[ { "id":"15", "color_code":"#D9DD29", "font_color_code":"#ed1b1b", "type":"Big Chunes", "is_fade":"1", "is_Active":"1", "delay_time":"0" }, { "id":"58", "color_code":"#19A87D", "font_color_code":"#ffffff", "type":"Demo", "is_fade":"1", "is_Active":"1", "delay_time":"0" } ] }'; // 将JSON解码为关联数组(第二个参数true表示返回数组而非对象) $decodedData = json_decode($json, true); // 初始化SimpleXML,创建根节点<root> $xml = new SimpleXMLElement('<root/>'); // 遍历data数组中的每个条目 foreach ($decodedData['data'] as $item) { // 为每个条目创建<item>子节点 $xmlItem = $xml->addChild('item'); // 遍历条目中的每个键值对,生成对应的XML子元素 foreach ($item as $key => $value) { // 使用htmlspecialchars转义特殊字符,避免XML格式错误 $xmlItem->addChild($key, htmlspecialchars($value)); } } // 输出XML内容,或者用$xml->asXML('output.xml')保存到文件 echo $xml->asXML();
输出的XML示例
<?xml version="1.0"?> <root> <item> <id>15</id> <color_code>#D9DD29</color_code> <font_color_code>#ed1b1b</font_color_code> <type>Big Chunes</type> <is_fade>1</is_fade> <is_Active>1</is_Active> <delay_time>0</delay_time> </item> <item> <id>58</id> <color_code>#19A87D</color_code> <font_color_code>#ffffff</font_color_code> <type>Demo</type> <is_fade>1</is_fade> <is_Active>1</is_Active> <delay_time>0</delay_time> </item> </root>
方法二:递归转换(适合复杂嵌套的JSON)
如果你的JSON有多层嵌套的数组或对象,上面的循环就不够用了,这时候可以写一个递归函数来处理所有层级:
示例代码
// 递归处理JSON转XML的函数 function convertJsonToXml($data, &$xmlParentNode) { foreach ($data as $key => $value) { // 如果键是数字,改用<item>作为节点名(XML节点名不能以数字开头) $nodeName = is_numeric($key) ? 'item' : $key; if (is_array($value)) { // 如果是数组,创建子节点并递归处理 $childNode = $xmlParentNode->addChild($nodeName); convertJsonToXml($value, $childNode); } else { // 如果是普通值,直接添加子元素 $xmlParentNode->addChild($nodeName, htmlspecialchars($value)); } } } // 初始化JSON数据和XML根节点 $json = '{ "data":[ { "id":"15", "color_code":"#D9DD29", "font_color_code":"#ed1b1b", "type":"Big Chunes", "is_fade":"1", "is_Active":"1", "delay_time":"0" }, { "id":"58", "color_code":"#19A87D", "font_color_code":"#ffffff", "type":"Demo", "is_fade":"1", "is_Active":"1", "delay_time":"0" } ] }'; $decodedData = json_decode($json, true); $xml = new SimpleXMLElement('<root/>'); // 调用递归函数转换 convertJsonToXml($decodedData, $xml); // 输出或保存XML echo $xml->asXML();
注意事项
- 一定要用
htmlspecialchars()处理值,避免XML中出现&、<、>这类特殊字符导致解析错误 - 如果需要自定义XML结构(比如把某些字段设为节点属性而非子元素),可以修改代码,比如用
addAttribute()代替addChild()
内容的提问来源于stack exchange,提问作者Nikunj Gadhiya
相关产品推荐
相关产品推荐

