php操作xml(2)

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

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜中雨滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值