香港高速VIP云机房火爆上线啦!无需备案,开通即用!配套《巅云自助建站系统3.0》将带给您飞一般的可视化拖拽建站体验,欢迎免费体验。

建站专题

PHP实现XML与数据格式进行转换类实例

一佰互联网站开发设计(www.yinxi.net) 发布日期 2019-04-27 10:45:01 浏览数: 47

本文实例讲述了PHP实现XML与数据格式进行转换类。分享给大家供大家参考。具体如下:

<?php/** * xml2array() will convert the given XML text to an array in the XML structure.  * Link: http://www.bin-co.com/php/scripts/xml2array/  * Arguments : $contents - The XML text  * $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value.  * $priority - Can be "tag" or "attribute". This will change the way the resulting array sturcture. For "tag", the tags are given more importance. * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure.  * Examples: $array = xml2array(file_get_contents("feed.xml"));  * $array = xml2array(file_get_contents("feed.xml", 1, "attribute")); */function xml2array($contents, $get_attributes = 1, $priority = "tag") {  if (!$contents) return array();  if (!function_exists("xml_parser_create")) {    // print ""xml_parser_create()" function not found!";    return array();  }   // Get the XML parser of PHP - PHP must have this module for the parser to work  $parser = xml_parser_create("");  xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); // http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss   xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);  xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);  xml_parse_into_struct($parser, trim($contents), $xml_values);  xml_parser_free($parser);  if (!$xml_values) return; //Hmm...   // Initializations  $xml_array = array();  $parents = array();  $opened_tags = array();  $arr = array();  $current = &$xml_array; //Refference   // Go through the tags.  $repeated_tag_index = array(); //Multiple tags with same name will be turned into an array   foreach($xml_values as $data) {    unset($attributes, $value); //Remove existing values, or there will be trouble     // This command will extract these variables into the foreach scope    // tag(string), type(string), level(int), attributes(array).    extract($data); //We could use the array by itself, but this cooler.     $result = array();    $attributes_data = array();    if (isset($value)) {      if ($priority == "tag") $result = $value;      else $result["value"] = $value; //Put the value in a assoc array if we are in the "Attribute" mode     }     // Set the attributes too.    if (isset($attributes) and $get_attributes) {      foreach($attributes as $attr => $val) {        if ($priority == "tag") $attributes_data[$attr] = $val;        else $result["attr"][$attr] = $val; //Set all the attributes in a array called "attr"       }     }     // See tag status and do the needed.    if ($type == "open") { // The starting of the tag "<tag>"      $parent[$level-1] = &$current;      if (!is_array($current) or (!in_array($tag, array_keys($current)))) { // Insert New tag        $current[$tag] = $result;        if ($attributes_data) $current[$tag . "_attr"] = $attributes_data;        $repeated_tag_index[$tag . "_" . $level] = 1;        $current = &$current[$tag];      } else { // There was another element with the same tag name        if (isset($current[$tag][0])) { // If there is a 0th element it is already an array          $current[$tag][$repeated_tag_index[$tag . "_" . $level]] = $result;          $repeated_tag_index[$tag . "_" . $level]++;        } else { // This section will make the value an array if multiple tags with the same name appear together          $current[$tag] = array($current[$tag], $result); //This will combine the existing item and the new item together to make an array           $repeated_tag_index[$tag . "_" . $level] = 2;          if (isset($current[$tag . "_attr"])) { // The attribute of the last(0th) tag must be moved as well            $current[$tag]["0_attr"] = $current[$tag . "_attr"];            unset($current[$tag . "_attr"]);          }         }         $last_item_index = $repeated_tag_index[$tag . "_" . $level]-1;        $current = &$current[$tag][$last_item_index];      }     } elseif ($type == "complete") { // Tags that ends in 1 line "<tag />"      // See if the key is already taken.      if (!isset($current[$tag])) { // New Key        $current[$tag] = $result;        $repeated_tag_index[$tag . "_" . $level] = 1;        if ($priority == "tag" and $attributes_data) $current[$tag . "_attr"] = $attributes_data;      } else { // If taken, put all things inside a list(array)        if (isset($current[$tag][0]) and is_array($current[$tag])) { // If it is already an array...          // ...push the new element into that array.          $current[$tag][$repeated_tag_index[$tag . "_" . $level]] = $result;          if ($priority == "tag" and $get_attributes and $attributes_data) {            $current[$tag][$repeated_tag_index[$tag . "_" . $level] . "_attr"] = $attributes_data;          }           $repeated_tag_index[$tag . "_" . $level]++;        } else { // If it is not an array...          $current[$tag] = array($current[$tag], $result); //...Make it an array using using the existing value and the new value           $repeated_tag_index[$tag . "_" . $level] = 1;          if ($priority == "tag" and $get_attributes) {            if (isset($current[$tag . "_attr"])) { // The attribute of the last(0th) tag must be moved as well              $current[$tag]["0_attr"] = $current[$tag . "_attr"];              unset($current[$tag . "_attr"]);            }             if ($attributes_data) {              $current[$tag][$repeated_tag_index[$tag . "_" . $level] . "_attr"] = $attributes_data;            }           }           $repeated_tag_index[$tag . "_" . $level]++; //0 and 1 index is already taken         }       }     } elseif ($type == "close") { // End of tag "</tag>"      $current = &$parent[$level-1];    }   }   return($xml_array);} // Array to XMLclass array2xml {  public $output = "<?xml version="1.0" encoding="utf-8"?>";  public $sub_item = array();  public function __construct($array) {    $sub_item = array();    $this->output .= $this->xmlmake($array);  }   public function xmlmake($array, $fk = "") {    $xml = "";    global $sub_item;    foreach ($array as $key => $value) {      if (is_array($value)) {        if (is_numeric($key)) {          $this->sub_item=array_merge($this->sub_item,array($fk));          $xml .= "<{$fk}>" . $this->xmlmake($value, $key) . "</{$fk}>";        } else {          $xml .= "<{$key}>" . $this->xmlmake($value, $key) . "</{$key}>";        }       } else {        $xml .= "<{$key}>{$value}</{$key}>";      }     }     return $xml;  }   public function output(){    foreach($this->sub_item as $t){      $this->output = str_replace("<{$t}><{$t}>","<{$t}>",$this->output);      $this->output = str_replace("</{$t}></{$t}>","</{$t}>",$this->output);    }    return $this->output;  }}

希望本文所述对大家的php程序设计有所帮助。

一佰互联是全国知名建站品牌服务商,我们有九年网站建设、网站制作、网页设计、php开发和域名注册及虚拟主机服务经验,提供的自助建站服务更是全国有名。近年来还整合团队优势自主开发了可视化多用户”巅云建站系统“3.0平台版,拖拽排版网站制作设计,轻松实现pc站、手机微网站、小程序、APP一体化全网营销网站建设 ,已成功的为全国上百家网络公司提供自助建站平台搭建服务。

相关新闻more

01
05月
mysql中存储过程、函数的一些问题

最近写一些mysql的存储过程和函数,发现网上比较有价值的文档很少,大都是照着手册上抄来的,有些实际问题解决不了,比如用变量作表名。 经过反... >>详情

01
04月
抖音企业认证没有包括蓝v

简介:认证后,企业号将享有十大营销特权。包括蓝v认证标识、搜索排名靠前、购物车功能(内测中)、个人主页自定义、60秒长视频开通、视频置顶权益... >>详情

07
04月
用四个步骤,帮你学会金刚区图标的设计方法 -

编者按:什么是金刚区?意义和功能是什么?金刚区图标的类型和表现手法是什么?有哪些设计要点?本文从4个维度为你一一揭秘。文章目录:什么是金刚区... >>详情

11
04月
神器两连发!开源动画库Lottie+Sket

编者按:今天推荐两个设计神器,一个是Airbnb  发布的开源动画库 Lottie,帮你轻松让动效落地。一个是Sketch 44 新版的编组... >>详情

营业执照. cdn加速服务 备案系统认证 网络安全协会 我们的支付方式AAA认证
上海 北京 深圳 广州 天津 杭州 南京 武汉 成都 沈阳 大连 长沙 济南 青岛 苏州 福州 无锡 哈尔滨 宁波 重庆 大庆 厦门 西安 长春 珠海 郑州 海口 昆明 太原 石家庄 温州 合肥 乌鲁木齐 南宁 南通 合肥 兰州 呼和浩特 贵阳 烟台 秦皇岛 包头 唐山 银川 汕头 连云港 威海 西宁 湛江 北海 万州 涪陵 长寿 黔江 永川 丰都 忠县 江津 南川 开县 云阳 万盛 梁平 垫江 巫山 城口 建站宝盒 免费建站 门户网站建设 微信网站 手机网站 门户网站制作

7x24小时服务电话:18581389571 传真:023-85725751 免费建站交流群:236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 网站投诉:
重庆楚捷科技有限公司 一佰互联©版权所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保护,网站法律顾问:ITLAW-庄毅雄律师
中华人民共和国信息产业部网站备案号:渝ICP备12000592号