xml 和array互换

 /**
  * 数组编码为XML
  * @param array $data 数据
  * @return mixed 编码后数据
  */
 function xmlencode($data){
     $xml = new \SimpleXMLElement('<xml></xml>');
     arrayToXml($xml, $data);
     return $xml->asXML();
 }

 /**
  * XML转换为数组
  * @param string $xml XML数据
  */
 function xmldecode($xml){
     $xml = new \SimpleXMLElement($xml);
     $data = array();
     foreach($xml as $key => $value){
         $data[$key] = strval($value);
     }
     return $data;
 }

 /**
  * 数组转换XML
  * @param object $xml XML对象
  * @param array $data 数据
  * @param string $item Item
  */
 function arrayToXml($xml, $data, $item = 'item'){
     foreach($data as $key => $value){
         is_numeric($key) && $key = $item;

         if(is_array($value) || is_object($value)){
             $child = $xml->addChild($key);
             arrayToXml($child, $value, $item);
         }else{
             if(is_numeric($value)){
                 $child = $xml->addChild($key, $value);
             }else{
                 $child = $xml->addChild($key);
                 $node = dom_import_simplexml($child);
                 $cdata = $node->ownerDocument->createCDATASection($value);
                 $node->appendChild($cdata);
             }
         }
     }
 }

toXml

 public static function toXml($array){
         $xml = '<xml>';
         forEach($array as $k=>$v){
             $xml.='<'.$k.'><![CDATA['.$v.']]></'.$k.'>';
         }
         $xml.='</xml>';
         return $xml;
     }

toarr

 public static function parseXML($xmlSrc){
         if(empty($xmlSrc)){
             return false;
         }
         $array = array();
         $xml = simplexml_load_string($xmlSrc);
         $encode = Utils::getXmlEncode($xmlSrc);

         if($xml && $xml->children()) {
             foreach ($xml->children() as $node){
                 //有子节点
                 if($node->children()) {
                     $k = $node->getName();
                     $nodeXml = $node->asXML();
                     $v = substr($nodeXml, strlen($k)+, strlen($nodeXml)-*strlen($k)-);

                 } else {
                     $k = $node->getName();
                     $v = (string)$node;
                 }

                 if($encode!="" && $encode != "UTF-8") {
                     $k = iconv("UTF-8", $encode, $k);
                     $v = iconv("UTF-8", $encode, $v);
                 }
                 $array[$k] = $v;
             }
         }
         return $array;
     }

获取xml编码

 function getXmlEncode($xml) {
         $ret = preg_match ("/<?xml[^>]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr);
         if($ret) {
             ] );
         } else {
             return "";
         }
     }

php总结 --- 10. xml操作的更多相关文章

  1. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  2. PHP XML操作的各种方法解析

    PHP提供了一整套的读取 XML文件的方法,很容易的就可以编写基于 XML的脚本程序.本章将要介绍 PHP与 XML的操作方法,并对几个常用的 XML类库做一些简要介绍. XML是一种流行的半结构化文 ...

  3. T-Sql(五)xml操作

    t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...

  4. XML格式示例 与 XML操作(读取)类封装

    header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...

  5. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

  6. 简单的XML操作类

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  7. .net学习笔记---xml操作及读写

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...

  8. C#常用操作类库三(XML操作类)

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  9. php xml 操作。

    参考 文章:http://www.cnblogs.com/zcy_soft/archive/2011/01/26/1945482.html DOMDocument相关的内容. 属性: Attribut ...

随机推荐

  1. 【转载】区间信息的维护与查询(一)——二叉索引树(Fenwick树、树状数组)

    在网上找到一篇非常不错的树状数组的博客,拿来转载,原文地址. 树状数组 最新看了一下区间的查询与修改的知识,最主要看到的是树状数组(BIT),以前感觉好高大上的东西,其实也不过就这么简单而已. 我们有 ...

  2. 微信蓝牙BLE接入调试指引 硬件篇

    1 平台框架简介 微信蓝牙BLE由三个模块组成,分别是蓝牙设备.微信和第三方服务器,如下图: 蓝牙设备与微信之间的通信是通过蓝牙GATT协议进行. 微信与第三方服器之间的通信是通过网络http 接口进 ...

  3. 使用Mongo官方驱动操作Mongo数据库

    首先到 https://github.com/mongodb/mongo-csharp-driver/downloads 下载Mongo官方驱动 下载完成后引用到项目中 public class Co ...

  4. 《Linux内核分析》第二周 操作系统是如何工作的?

    [刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK TWO(2 ...

  5. Rsyslog配置文件详解

    Rsyslog配置文件详解https://my.oschina.net/0757/blog/198329 # Save boot messages also to boot.log 启动的相关信息lo ...

  6. tesseract ocr文字识别Android实例程序和训练工具全部源代码

    tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学 ...

  7. 【转】PHP 位运算应用口诀

    位运算应用口诀 清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 移位运算 要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形. 2 "<<" ...

  8. apache php env build

    from http://blog.csdn.net/yincg/article/details/8782364 1.1 系统说明Centos 6.2 (最小化安装)1.2 软件说明httpd-2.4. ...

  9. Linux中的软硬链接

    说到Linux中的软硬链接,就必须谈一下Linux的文件系统的组成的重要部分iNode和block. 首先是iNode,先用一张图了解一下iNode在Linux文件系统中的地位: Linux中的文件的 ...

  10. 使用 robotframework 自动化测试系列 一 -----简介

    robotframework 是自动化测试框架. Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可 ...