最常用、可靠的方式是用递归函数手动遍历并构建数组,能准确区分属性、文本、子节点并处理重复标签;而json_decode(json_encode((array)$xml), true)易丢失属性、覆盖同名节点,仅适用于无属性无重复的简单场景。
PHP 将 XML 对象(SimpleXMLElement)转成数组,最常用、可靠的方式是用递归函数手动遍历并构建数组。因为 json_decode(json_encode((array)$xml), true) 这种“伪转换”在属性、文本混合、重复子节点、CDATA 等场景下容易出错或丢失数据。
这个方法能准确区分元素属性、文本内容、子节点,并保留结构层次:
function xmlToArray($xml) {
if (!($xml instanceof SimpleXMLElement)) {
return $xml;
}
$array = [];
// 处理属性
$attributes = $xml->attributes();
if ($attributes && count($attributes) > 0) {
foreach ($attribut
es as $attr => $value) {
$array['@attributes'][$attr] = (string)$value;
}
}
// 处理子节点(含文本节点)
$children = $xml->children();
if (count($children) > 0) {
foreach ($children as $childName => $child) {
$childArray = xmlToArray($child);
if (!isset($array[$childName])) {
$array[$childName] = $childArray;
} else {
// 同名子节点多个时转为数组(避免覆盖)
if (!is_array($array[$childName]) || !isset($array[$childName][0])) {
$array[$childName] = [$array[$childName]];
}
$array[$childName][] = $childArray;
}
}
} else {
// 只有文本内容(无子节点)
$text = trim((string)$xml);
if ($text !== '' || isset($array['@attributes'])) {
$array['#text'] = $text;
}
}
return $array;
}
// 使用示例
$xmlStr = '张三 - a
- b
';
$xml = simplexml_load_string($xmlStr);
$result = xmlToArray($xml);
print_r($result);
如果 XML 结构非常规整(比如全是单层子节点、无属性、无同名多节点),可用更简方式:
$arr = json_decode(json_encode($xml), true);
(array)$xml 强转,会丢失结构信息 会覆盖第一个,需靠 @attributes 和 #text 区分逻辑simplexml_load_string($xml, null, LIBXML_NOBLANKS, 'ns') 并在递归中调用 $xml->children('ns', true)
基本上就这些。核心是别图省事用 json 中转,写个十几行递归函数反而更稳、更可控。
# php
# js
# json
# 递归函数
# Array
# NULL
# 命名空间
# xml
# 递归
# 对象
# 遍历
# 最常用
# 第一个
# 多个
# 适用于
# 并在
# 第二个
# 十几
# 会把
相关文章:
如何在建站宝盒中设置产品搜索功能?
教程网站设计制作软件,怎么创建自己的一个网站?
制作网站的公司有哪些,做一个公司网站要多少钱?
三星网站视频制作教程下载,三星w23网页如何全屏?
,购物网站怎么盈利呢?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
如何确保FTP站点访问权限与数据传输安全?
h5在线制作网站电脑版下载,h5网页制作软件?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站之星展会模版如何一键下载生成?
如何通过FTP服务器快速搭建网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
建站之星如何优化SEO以实现高效排名?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何高效完成独享虚拟主机建站?
建站之星如何通过成品分离优化网站效率?
专业公司网站制作公司,用什么语言做企业网站比较好?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在IIS中新建站点并配置端口与物理路径?
利用JavaScript实现拖拽改变元素大小
完全自定义免费建站平台:主题模板在线生成一站式服务
如何获取开源自助建站系统免费下载链接?
C++如何编写函数模板?(泛型编程入门)
如何解决ASP生成WAP建站中文乱码问题?
建站上市公司网站建设方案与SEO优化服务定制指南
如何用低价快速搭建高质量网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何通过VPS建站实现广告与增值服务盈利?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
如何高效利用亚马逊云主机搭建企业网站?
C++如何使用std::optional?(处理可选值)
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
宝塔新建站点报错如何解决?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何登录建站主机?访问步骤全解析
如何在阿里云香港服务器快速搭建网站?
移民网站制作流程,怎么看加拿大移民官网?
北京专业网站制作设计师招聘,北京白云观官方网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何制作一个表白网站视频,关于勇敢表白的小标题?
建站之星如何一键生成手机站?
建站之星代理如何优化在线客服效率?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
制作营销网站公司,淘特是干什么用的?
如何通过远程VPS快速搭建个人网站?
建站之星代理费用多少?最新价格详情介绍
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
javascript中的try catch异常捕获机制用法分析
*请认真填写需求信息,我们会在24小时内与您取得联系。