为甚要相互转换,还是因为麻烦,程序员都是反感麻烦的
1 数组转xml
/*
一维数组转xml
思路:
循环数组每个单元,加入到xml文档节点中去
*/
/*
$arr = array(
'name'=> '丁三','age'=>29
);
function arr2xml($arr) {
$simxml = new simpleXMLElement('<?xml version="1.0" encoding="utf-8"?>');
// simpleXMLElement对象如何增加子节点?
foreach($arr as $k=>$v) {
$simxml->addChild($k,$v);
}
return $simxml->saveXML();
}
*/
$arr = array(
'name'=> '丁三','age'=>29,'job'=>array(
'title'=>'经理','salary'=>8888,'team'=>array('小红','小明','小华')
)
);
function arr2xml($arr,$node=null) {
if($node === null) {
$simxml = new simpleXMLElement('<?xml version="1.0" encoding="utf-8"?>');
} else {
$simxml = $node;
}
// simpleXMLElement对象如何增加子节点?
foreach($arr as $k=>$v) {
if(is_array($v)) {
//$simxml->addChild($k);
arr2xml($v,$simxml->addChild($k));
} else if(is_numeric($k)) { //标签不能以数字开头,和变量类似
$simxml->addChild('item' . $k,$v);
} else {
$simxml->addChild($k,$v);
}
}
return $simxml->saveXML();
}
header('content-type: text/xml');
echo arr2xml($arr);
运行结果:
2 xml转数组
/***
// 访问时,一会用->,一会用[],不方便
// 接下来我们练习xml转数组
echo $simxml->book[0]->title;
利用simplexml对象把xml文件转成数组,***/
/*
对象 用属性名->属性值,存储变量
数组 用键名->键值,来存储变量
二者区别不大,在js里,对象就可以看成关联数组来操作.
*/
$simxml = simplexml_load_file('./book.xml');
/*
print_r($simxml);
echo '
';
// 类型强制转换,把对象转成数组
print_r((array) $simxml); //最外层是数组,里面可能还包含对象
*/
// 写一个函数,递归把simpleXML对象转成数组
// 思路:先把最外层对象转成数组,再循环数组,// 某个单元只要还是对象,就继续调用自身来转换
function toArray($sim) {
$arr = (array) $sim;
foreach($arr as $k=>$v) {
if($v instanceof simplexmlelement || is_array($v)) {
$arr[$k] = toArray($v);
}
}
return $arr;
}
print_r($simxml);
print_r($xmlarr = toArray($simxml));
echo $xmlarr['book']['1']['title'];
总结
以上是编程之家为你收集整理的XML数组和对象相互转换全部内容,希望文章能够帮你解决XML数组和对象相互转换所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。