php操作xml(2)
在上一篇文章中由xml和数组之间的转换是没有涉及到xml属性的,只是xml的值和数组之间的转换,那么如果xml中有值也有属性,又该怎么办呢,请看下面的介绍(本文章只介绍xml转换为数组),比如过你的xml为:
<?xml version="1.0" encoding="utf-8"?> <phplamp key="5"> <post key="x"> <title id="1">PHP XML处理介绍一</title> <details>详细内容一</details> </post> <post key="y"> <title id="2">PHP XML处理介绍二 </title> <details key="5">详细内容二 </details> </post> <post key="z"> <title id="3">PHP XML处理介绍三</title> <details>详细内容三</details> </post> </phplamp>
那么该怎么样转换成数组呢,如果还用上一篇文章中的方法就不行了(不过上一篇文章的xml可以用本文章的方法哦)
如果让上面的xml转换成数组,需要用到以下函数
function xml2array($xml) {
$arXML=array();
$arXML['name']=trim($xml->getName());
$arXML['value']=trim((string)$xml);
$t=array();
foreach($xml->attributes() as$name => $value){
$t[$name]=trim($value);
}
$arXML['attr']=$t;
$t=array();
foreach($xml->children() as$name => $xmlchild) {
$t[$name][]=xml2array($xmlchild);
}
$arXML['children']=$t;
return($arXML);
}具体用法代码如下:
$xml = simplexml_load_string($xml); $xmlArr = xml2array($xml); dump($xmlArr);
打印出来$xmlArr的结构如下:
array(4) {
["name"] => string(7) "phplamp"
["value"] => string(0) ""
["attr"] => array(1) {
["key"] => string(1) "5"
}
["children"] => array(1) {
["post"] => array(3) {
[0] => array(4) {
["name"] => string(4) "post"
["value"] => string(0) ""
["attr"] => array(1) {
["key"] => string(1) "x"
}
["children"] => array(2) {
["title"] => array(1) {
[0] => array(4) {
["name"] => string(5) "title"
["value"] => string(22) "PHP XML处理介绍一"
["attr"] => array(1) {
["id"] => string(1) "1"
}
["children"] => array(0) {
}
}
}
["details"] => array(1) {
[0] => array(4) {
["name"] => string(7) "details"
["value"] => string(15) "详细内容一"
["attr"] => array(0) {
}
["children"] => array(0) {
}
}
}
}
}
[1] => array(4) {
["name"] => string(4) "post"
["value"] => string(0) ""
["attr"] => array(1) {
["key"] => string(1) "y"
}
["children"] => array(2) {
["title"] => array(1) {
[0] => array(4) {
["name"] => string(5) "title"
["value"] => string(22) "PHP XML处理介绍二"
["attr"] => array(1) {
["id"] => string(1) "2"
}
["children"] => array(0) {
}
}
}
["details"] => array(1) {
[0] => array(4) {
["name"] => string(7) "details"
["value"] => string(15) "详细内容二"
["attr"] => array(1) {
["key"] => string(1) "5"
}
["children"] => array(0) {
}
}
}
}
}
[2] => array(4) {
["name"] => string(4) "post"
["value"] => string(0) ""
["attr"] => array(1) {
["key"] => string(1) "z"
}
["children"] => array(2) {
["title"] => array(1) {
[0] => array(4) {
["name"] => string(5) "title"
["value"] => string(22) "PHP XML处理介绍三"
["attr"] => array(1) {
["id"] => string(1) "3"
}
["children"] => array(0) {
}
}
}
["details"] => array(1) {
[0] => array(4) {
["name"] => string(7) "details"
["value"] => string(15) "详细内容三"
["attr"] => array(0) {
}
["children"] => array(0) {
}
}
}
}
}
}
}
}你可以自己去分析该数组结构,这里我就不做分析了
附:上面的输出格式是属于一种浏览器友好输出格式,挺方便浏览的,可以作为参考,代码如下:
function dump($var, $echo=true, $label=null, $strict=true) {
$label = ($label === null) ? '' : rtrim($label) . ' ';
if (!$strict) {
if (ini_get('html_errors')) {
$output = print_r($var, true);
$output = "<pre>" . $label . htmlspecialchars($output, ENT_QUOTES) . "</pre>";
} else {
$output = $label . print_r($var, true);
}
} else {
ob_start();
var_dump($var);
$output = ob_get_clean();
if (!extension_loaded('xdebug')) {
$output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
$output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
}
}
if ($echo) {
echo($output);
return null;
}else
return$output;
}一、推荐使用迅雷或快车等多线程下载软件下载本站资源。
二、未登录会员无法下载,登录后可获得更多便利功能,若未注册,请先注册。
三、如果服务器暂不能下载请稍后重试!总是不能下载,请点我报错 ,谢谢合作!
四、本站大部分资源是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站将不对任何资源负法律责任.如果您发现本站有部分资源侵害了您的权益,请速与我们联系,我们将尽快处理.
五、如有其他问题,请加网站设计交流群(点击这里查看交流群 )进行交流。
六、如需转载本站资源,请注明转载来自并附带链接
七、本站部分资源为加密压缩文件,统一解压密码为:www.aizhanzhe.com
大家评论
站长推荐
