PHP XML To Array将XML转换为数组


 1 // Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误
2 function xml_to_array( $xml )
3 {
4 $reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
5 if(preg_match_all($reg, $xml, $matches))
6 {
7 $count = count($matches[0]);
8 $arr = array();
9 for($i = 0; $i < $count; $i++)
10 {
11 $key= $matches[1][$i];
12 $val = xml_to_array( $matches[2][$i] ); // 递归
13 if(array_key_exists($key, $arr))
14 {
15 if(is_array($arr[$key]))
16 {
17 if(!array_key_exists(0,$arr[$key]))
18 {
19 $arr[$key] = array($arr[$key]);
20 }
21 }else{
22 $arr[$key] = array($arr[$key]);
23 }
24 $arr[$key][] = $val;
25 }else{
26 $arr[$key] = $val;
27 }
28 }
29 return $arr;
30 }else{
31 return $xml;
32 }
33 }
34 // Xml 转 数组, 不包括根键
35 function xmltoarray( $xml )
36 {
37 $arr = xml_to_array($xml);
38 $key = array_keys($arr);
39 return $arr[$key[0]];
40 }


 1 // 类似 XPATH 的数组选择器
2 function xml_array_select( $arr, $arrpath )
3 {
4 $arrpath = trim( $arrpath, ‘/‘ );
5 if(!$arrpath) return $arr;
6 $self = ‘xml_array_select‘;
7
8 $pos = strpos( $arrpath, ‘/‘ );
9 $pos = $pos ? $pos : strlen($arrpath);
10 $curpath = substr($arrpath, 0, $pos);
11 $next = substr($arrpath, $pos);
12
13 if(preg_match("/\\[(\\d+)\\]$/",$curpath,$predicate))
14 {
15 $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
16 $result = $arr[$curpath][$predicate[1]];
17 }else $result = $arr[$curpath];
18
19 if( is_array($arr) && !array_key_exists($curpath, $arr) )
20 {
21 die( ‘key is not exists:‘ . $curpath );
22 }
23
24 return $self($result, $next);
25 }
26 // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback
27 function xml_array_each( $arr, $callback )
28 {
29 if(func_num_args()<2) die(‘parameters error‘);
30 if(!is_array($arr)) die(‘parameter 1 shuld be an array!‘);
31 if(!is_callable($callback)) die(‘parameter 2 shuld be an function!‘);
32 $keys = array_keys($arr);
33 $isok = true;
34 foreach( $keys as $key ) {if(!is_int($key)) {$isok = false; break;}}
35 if($isok)
36 foreach( $arr as $val ) $result[] = $callback($val);
37 else
38 $result[] = $callback( $arr );
39 return $result;
40 }


/**
* 最简单的XML转数组
* @param string $xmlstring XML字符串
* @return array XML数组
*/
function simplest_xml_to_array($xmlstring) {
return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);
}

PHP XML To Array将XML转换为数组,布布扣,bubuko.com

时间: 2024-12-25 01:03:37

PHP XML To Array将XML转换为数组的相关文章

php解析xml,并将xml转换为层级数组

1)xml_parser_create([ string $encoding ] ):建立一个新的xml解析器并返回可被其他xml函数使用的资源句柄, 参数$encoding: php4,中用来只指定要被解析的xml输入的字符编码方式: php5,自动侦测输入xml的编码,encoding仅用来指定解析后输出数据的编码 默认:输入编码=输出编码 php5.0.2+默认编码utf-8:之前版本,ISO-8859-1 2)bool xml_parser_set_option(resource $pa

一个简单xml数据转换为数组的方法

本人用easywechat做微信回复图文,从数据库中拿到的数据直接是xml拼好的数据,但是框架只有自带的获取xml格式的语句,所有需要将xml数据中所需要的数据拿出来用来拼接. 搜了好多资料说的都很麻烦.ps:可能是我水平不够;-) ok,废话不多说, 上代码: // 以这个xml数据串为例 $xml = "<item><Title><![CDATA[亲爱的顾客:]]></Title><Content><![CDATA[]]>

PHP将XML数据转换为数组

<?php $s=join(,file('httpapi.elong.comxmlv2.0hotelcn0132701501.xml')); $result = xml_to_array($s); print_r($result); /*函数*/ function xml_to_array($xml) { $array = (array)(simplexml_load_string($xml)); foreach ($array as $key=$item){ $array[$key] = st

php xml操作类DOMDocument xml转化为数组的函数

/** * node2array函数,将xml转换为数组 * @param object $node */ public function node2array($node){ $array = false; if ($node->hasAttributes()){ foreach ($node->attributes as $attr){ $array[$attr->nodeName] = $attr->nodeValue; } } if ($node->hasChildN

ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

前言 xsl是一门标签解析语言,很适合做动态网页的前台标签 www.bamn.cn 1 首先是aspx页面 添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件 <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"

js解析xml字符串或xml文件,将其转换为xml对象

注:判断是否是ie浏览器和非ie浏览器的方法有多种,在此只介绍用例中的方法: 1.解析xml字符串,得到xml对象的方式: function createXml(str){ if(document.all){//IE浏览器     var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");        xmlDoc.async = false;     xmlDoc.loadXML(str);     return xmlDoc; } el

PHP array to xml

<?php    define('NODE_FORMATE', "<%s>%s</%s>"); $testXml = array(        'SubscribeToVSOPReq' => array(                'ActionType' => '0',                'OrderId' => '100000003800000000000000000001',                'Use

array与xml转换实现(转)

<?php function xml_encode($data, $charset = 'utf-8', $root = 'so') { $xml = '<?xml version="1.0" encoding="' . $charset .'"?>'; $xml .= "<{$root}>"; $xml .= array_to_xml($data); $xml .= "</{$root}>&q

php xml 转array 函数 (原创)

/** *Author zhudongchang *Date 2015/6/12 *xml 转array 函数 *@param string $xmlStr xml字符串 *@return string */ function convertXmlToArray($xmlStr){ $patten=<<<EOT /(^\s*<(\s*[a-zA-Z0-9_='":]+\s*)+>.*<\s*\/(\s*[a-zA-Z0-9_='":]+\s*)+&g