关于php操作xml的文章在网上找了好多,才能总结如下:
因为php对数组操作比较方便,所以该文章主要是数组和xml之间的转换,希望能对读者有用
1.把数组转换为xml
如果需要把数组转换为xml需要下面两个函数(其实这两个函数可以合并为一个函数,为了以后调用和扩展方便,所以放到两个函数里了)
function xmlEncode($array, $encoding='utf-8', $root="root") {
$xml = '<?xml version="1.0" encoding="' . $encoding . '"?>';
$xml.= '<' . $root . '>';
$xml.= arrayToXml($array);
$xml.= '</' . $root . '>';
return $xml;
}
function arrayToXml($array) {
if (is_object($array)) {
$data = get_object_vars($array);
}
$xml = '';
foreach ($array as $key => $val) {
is_numeric($key) && $key = "item id=\"$key\"";
$xml.="<$key>";
$xml.= ( is_array($val) || is_object($val)) ? dataToXml($val) : $val;
list($key, ) = explode(' ', $key);
$xml.="</$key>";
}
return $xml;
}
比如你的数组如下:
$data = array(
'key1'=>'value1',
'key2'=>'value2',
'key3'=>array(
'key31'=>'value31',
'key32'=>'value32',
'key33'=>'value33'),
'key4'=>array(
'key41'=>'value41',
'key42'=>'value42')
);
数组转换为xml的代码如下:
$xml = xmlEncode($data,'utf-8','root');
echo $xml;
输出结果如下图所示:
2.把xml转换为数组
如要把xml转换为数组需要用到以下函数
function objectsIntoArray($arrObjData) {
$arrData = array();
// if input is object, convert into array
if (is_object($arrObjData)) {
$arrObjData = get_object_vars($arrObjData);
}
//dump($arrObjData);exit;
if (is_array($arrObjData)) {
foreach ($arrObjData as $index => $value) {
if (is_object($value) || is_array($value)) {
$value = $this->objectsIntoArray($value); // recursive call
}
$arrData[$index] = $value;
}
}
return $arrData;
}
比如xml为上面生成的xml,转换为数组的代码如下:
$xml = simplexml_load_string($xml);
//如果你的xml是一个文件,可以用simplexml_load_file($filepath)
$return = objectsIntoArray($xml);
把$return打印出来就是你要的数组了