在上一篇文章中由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;
}

本文介绍了一种将带有属性的XML文档转换为数组的方法,并提供了一个具体的示例代码,展示了如何使用PHP实现这一转换。
1050

被折叠的 条评论
为什么被折叠?



