PHP数组与XML之间的转换的例子

 更新时间:2016年11月25日 16:53  点击:1418
数组与XML方法有不少如直接使用遍历数组然后生成xml同时也可以使用DOMDocument来生成xml,具体的方法与步骤如下所示。

PHP将数组转换成XML

PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如:

 代码如下 复制代码

function arrayToXml($arr){
    $xml = "<root>";
    foreach ($arr as $key=>$val){
        if(is_array($val)){
            $xml.="<".$key.">".arrayToXml($val)."</".$key.">";
        }else{
            $xml.="<".$key.">".$val."</".$key.">";
        }
    }
    $xml.="</root>";
    return $xml;
}

我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。

另一种方法是利用DOMDocument来生成xml结构:

 代码如下 复制代码

function arrayToXml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root"); 
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
            
        }else {
            arrayToXml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}

它同样可以将数组转换成xml,而且支持多维数组,生成的xml中文也不会乱码。

PHP将XML转换成数组

做接口开发的时候经常会碰到别人提交给你的是xml格式的数据,常见的微信接口、支付宝接口等,他们的接口如发送消息通信都是xml格式的,那么我们先想办法拿到这个xml数据,然后再将其转化成数组。
假设我们获取到一个这样的XML:

 代码如下 复制代码

<root>
<user>月光光abcd</user>
<pvs>13002</pvs>
<ips>
<baidu_ip>1200</baidu_ip>
<google_ip>1829</google_ip>
</ips>
<date>2016-06-01</date>
</root>

通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。

 代码如下 复制代码
function xmlToArray($xml){    
    //禁止引用外部xml实体
    libxml_disable_entity_loader(true);
    $xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
    $val = json_decode(json_encode($xmlstring),true);  
    return $val;
}

得到数组后,我们就可以对数据进行各种处理了。

下面是网上的

 代码如下 复制代码

class ArrayToXML
{
    /**
     * The main function for converting to an XML document.
     * Pass in a multi dimensional array and this recrusively loops through and builds up an XML document.
     *
     * @param array $data
     * @param string $rootNodeName - what you want the root node to be - defaultsto data.
     * @param SimpleXMLElement $xml - should only be used recursively
     * @return string XML
     */
    public static function toXml($data, $rootNodeName = 'data', $xml=null)
    {
        // turn off compatibility mode as simple xml throws a wobbly if you don't.
        if (ini_get('zend.ze1_compatibility_mode') == 1)
        {
            ini_set ('zend.ze1_compatibility_mode', 0);
        }
       
        if ($xml == null)
        {
            $xml = simplexml_load_string("<?xml version='1.0' encoding='utf-8'?><$rootNodeName />");
        }
       
        // loop through the data passed in.
        foreach($data as $key => $value)
        {
            // no numeric keys in our xml please!
            if (is_numeric($key))
            {
                // make string key...
                $key = "unknownNode_". (string) $key;
            }
           
            // replace anything not alpha numeric
            $key = preg_replace('/[^a-z]/i', '', $key);
           
            // if there is another array found recrusively call this function
            if (is_array($value))
            {
                $node = $xml->addChild($key);
                // recrusive call.
                ArrayToXML::toXml($value, $rootNodeName, $node);
            }
            else
            {
                // add single node.
                                $value = htmlentities($value);
                $xml->addChild($key,$value);
            }
           
        }
        // pass back as string. or simple xml object if you want!
        return $xml->asXML();
    }
}

下面是我自己编辑的代码

 代码如下 复制代码

function arrtoxml($arr,$dom=0,$item=0){
    if (!$dom){
        $dom = new DOMDocument("1.0");
    }
    if(!$item){
        $item = $dom->createElement("root");
        $dom->appendChild($item);
    }
    foreach ($arr as $key=>$val){
        $itemx = $dom->createElement(is_string($key)?$key:"item");
        $item->appendChild($itemx);
        if (!is_array($val)){
            $text = $dom->createTextNode($val);
            $itemx->appendChild($text);
           
        }else {
            arrtoxml($val,$dom,$itemx);
        }
    }
    return $dom->saveXML();
}

XML转成数组

 代码如下 复制代码

如果你使用 curl 获取的 xml data
$xml = simplexml_load_string($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
如果是直接获取 URL 数据的话
$xml = simplexml_load_file($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
先把 simplexml 对象转换成 json,再将 json 转换成数组。

XML转成数组是一件很简单的事情只要加载过来的数据我们进行解析即可实现,下面整理了不少关于xml转换成数组的例子,我们来参考一下。

例子

现在有一个uncletoo.xml的配置文件,格式如下:

<h6>Step 1: XML File</h6>
<?xml version='1.0'?>
<moleculedb>
    <molecule name='Benzine'>
        <symbol>ben</symbol>
        <code>A</code>
    </molecule>
    <molecule name='Water'>
        <symbol>h2o</symbol>
        <code>K</code>
    </molecule>
<molecule name='Parvez'>
        <symbol>h2o</symbol>
        <code>K</code>
    </molecule>
</moleculedb>


1、读XML文件内容,并保存到字符串变量中

下面我们使用PHP自带的file_get_contents()函数将文件内容读取到一个字符串变量中:

$xmlfile = file_get_contents($path);

此时$xmlfile变量的值如下:

2、将字符串转换为对象

这一步我们将使用simplexml_load_string()函数,将上一步得到的字符串转换为对象(Object):

$ob= simplexml_load_string($xmlfile);

此时$ob的值如下:


3、将对象转换为JSON

上一步转换成对象后,现在,我们要将对象转换成JSON格式字符串:

$json  = json_encode($ob);

此时$json变量的值如下:


4、解析JSON字符串

这也是最后一步了,我们需要将JSON格式的字符串转换为我们需要的数组:

$configData = json_decode($json, true);

现在$configData里存储的数据就是我么最后要得到的数组,如下:


完整转换代码:

 代码如下 复制代码


<?php
$xmlfile = file_get_contents($path);
$ob= simplexml_load_string($xmlfile);
$json  = json_encode($ob);
$configData = json_decode($json, true);
?>

下面为网上整理的xml转换数组函数


例子一,将XML转成数组

 代码如下 复制代码

如果你使用 curl 获取的 xml data
$xml = simplexml_load_string($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
如果是直接获取 URL 数据的话
$xml = simplexml_load_file($data);
$data['tk'] = json_decode(json_encode($xml),TRUE);
先把 simplexml 对象转换成 json,再将 json 转换成数组。

例子二,通过遍历

 代码如下 复制代码

// Xml 转 数组, 包括根键
function xml_to_array( $xml )
{
$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches))
{
$count = count($matches[0]);
for($i = 0; $i < $count; $i++)
{
$subxml= $matches[2][$i];
$key = $matches[1][$i];
if(preg_match( $reg, $subxml ))
{
$arr[$key] = xml_to_array( $subxml );
}else{
$arr[$key] = $subxml;
}
}
}
return $arr;
}
// Xml 转 数组, 不包括根键
function xmltoarray( $xml )
{
$arr = xml_to_array($xml);
$key = array_keys($arr);
return $arr[$key[0]];
}

例子三

 代码如下 复制代码

function simplexml_obj2array($obj){
      if ($obj instanceof SimpleXMLElement) {
       $obj = (array)$obj;
      }
    
      if (is_array($obj)) {
       $result = $keys = array();
       foreach( $obj as $key=>$value)
       {
        isset($keys[$key]) ? ($keys[$key] += 1) : ($keys[$key] = 1);
    
        if( $keys[$key] == 1 )
        {
         $result[$key] = simplexml_obj2array($value);
        }
        elseif( $keys[$key] == 2 )
        {
         $result[$key] = array($result[$key], simplexml_obj2array($value));
        }
        else if( $keys[$key] > 2 )
        {
         $result[$key][] = simplexml_obj2array($value);
        }
       }
       return $result;
      } else {
       return $obj;
      }
 }
$xml=simplexml_load_file("D:/ www.111cn.net /lib/books.xml");
 
$rss = simplexml_obj2array($xml);

在php中解析xml我们有许多的选择了,这里我们使用DOMDocument模块来处理xml文件吧,下面就一起来看一个使用DOMDocument解析xml的例子。

xml文件结构如下

 

xml

php代码解析:

$url="";//输出xml的URL

 

$dom = new DOMDocument('1.0', 'utf-8');

 

$dom->load($url);

 

这样我们捕获里XML数据,然后一点点截取,这段XML有多个URL节点,需要利DOMPATH解析

$xpath = new DOMXPath($dom);

 

$node = '//url';

 

$length = $xpath->query($node)->length;

 

然后根据每个url内的字节点去获取数据

for($i = 0; $i < $length; $i++) {

$data = array();

$m_date = date('Y-m-d', strtotime($xpath->query($node.'['.($i+1).']/date')->item(0)->nodeValue));

$m_start = $xpath->query($node.'['.($i+1).']/start')->item(0)->nodeValue;

$m_end = $xpath->query($node.'['.($i+1).']/end')->item(0)->nodeValue;

$m_title = $xpath->query($node.'['.($i+1).']/title')->item(0)->nodeValue;

$m_format = $xpath->query($node.'['.($i+1).']/format')->item(0)->nodeValue;

$m_season = $xpath->query($node.'['.($i+1).']/season')->item(0)->nodeValue;

$m_round = $xpath->query($node.'['.($i+1).']/round')->item(0)->nodeValue;

/*$homeTeam = $xpath->query($node.'['.($i+1).']/homeTeam')->item(0)->nodeValue;

if(empty($homeTeam)) continue;

$guestTeam = $xpath->query($node.'['.($i+1).']/guestTeam')->item(0)->nodeValue;

if(empty($guestTeam)) continue;*/

 

$homeTeam = $xpath->query($node.'['.($i+1).']/homeTeam')->item(0)->nodeValue;

$guestTeam = $xpath->query($node.'['.($i+1).']/guestTeam')->item(0)->nodeValue;

if(empty($guestTeam) || empty($homeTeam)) {

if($m_title){

$temp_title=explode(" ", $m_title);

list($homeTeam,$guestTeam)=explode("vs", $temp_title[1]);

unset($temp_title);

}

}

if(empty($homeTeam)) continue;

if(empty($guestTeam)) continue;

 

}

 

在php中处理xml文档的类或插件是非常的多了,今天我来为各位介绍xmlreader simplexmlDOMDocument 等读取xml的例子,希望下文能帮助到大家。

要处理 XML 文件,有两种传统的处理思路: SAX 和 DOM 。 SAX 基于事件触发机制,对 XML 文件进行一次扫描,完成要进行的处理; DOM 则将整个 XML 文件构造为一棵 DOM树,通过对 DOM 树的遍历完成处理。这两种方法各有优缺点, SAX 的处理思路相对抽象,DOM 的处理过程相对烦琐,都不很适合新手的入门。PHP5 推出了一套新的 XML 处理函数,即 SimpleXML 。名如其实, SimpleXML 本身小巧精干,只提供了少量的几个方法函数,但用它处理起 XML 文件功能却非常强大,操作也非常的简单。

一,什么是xml,xml有什么用途

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
XML的用途很多,可以用来存储数据,可以用来做数据交换,为很多种应用软件提示数据等等。

二,php读取xml的方法

xml源文件
 

 代码如下 复制代码
<?xml version="1.0" encoding="UTF-8"?> 
  <humans> 
  <zhangying> 
  <name>张映</name> 
  <sex>男</sex> 
  <old>28</old> 
  </zhangying> 
  <tank> 
  <name>tank</name> 
  <sex>男</sex> 
  <old>28</old> 
  </tank> 
  </humans> 

1)DOMDocument读取xml
 

 代码如下 复制代码
  <?php 
  $doc = new DOMDocument(); 
  $doc->load('person.xml');         //读取xml文件 
   
  $humans = $doc->getElementsByTagName( "humans" );         //取得humans标签的对象数组 
 
  foreach( $humans as $human ) 
  { 
  $names = $human->getElementsByTagName( "name" );           //取得name的标签的对象数组 
  $name = $names->item(0)->nodeValue;                                        //取得node中的值,如<name> </name> 
   
  $sexs = $human->getElementsByTagName( "sex" ); 
  $sex = $sexs->item(0)->nodeValue; 
  
  $olds = $human->getElementsByTagName( "old" ); 
  $old = $olds->item(0)->nodeValue; 
  
  echo "$name - $sex - $old\n"; 
  
  } 
  ?> 

2)simplexml读取xml
 

 代码如下 复制代码
<?php 
$xml_array=simplexml_load_file('person.xml');                        //将XML中的数据,读取到数组对象中 
 
foreach($xml_array as $tmp){ 
 echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>";    

 
?> 

3)用php正则表达式来记取数据
 

 代码如下 复制代码
<?php 
  $xml = ""; 
  $f = fopen('person.xml', 'r'); 
  while( $data = fread( $f, 4096 ) ) { 
   $xml .= $data; 
  } 
  fclose( $f ); 
  // 上面读取数据 
  preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans );       //匹配最外层标签里面的内容 
   
  foreach( $humans[1] as $k=>$human ) 
  { 
   preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name );             //匹配出名字 
   preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex );                        //匹配出性别 
   preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old );                        //匹配出年龄 
  } 
 
 foreach($name[1] as $key=>$val){ 
  echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ; 
 } 
?> 

4)xmlreader来读取xml数据
 

 代码如下 复制代码

<?php 
$reader = new XMLReader(); 
$reader->open('person.xml');                                                     //读取xml数据 
$i=1; 
while ($reader->read()) {                                                              //是否读取 
 if ($reader->nodeType == XMLReader::TEXT) {               //判断node类型 
  if($i%3){ 
   echo $reader->value;                                                                  //取得node的值 
  }else{ 
   echo $reader->value."<br>" ; 
  } 
  $i++; 
 } 

?> 


 

使用 DOMDocument 操控 XML

1. DOMDocument 解析 XML

 代码如下 复制代码

// 创建一个 DOMDocument()

$_doc = new DOMDocument();

// 载入 xml

$_doc ->load( 'test.xml' );

// 取 version 标签

$_version = $_doc ->getElementsByTagName( 'version' );

echo $_version ->item( 2 )->nodeValue;

// 遍历 version 标签

foreach ( $_version as $v ) {

echo $v ->nodeValue;

}

2. DOMDocument 生成 XML

// 声明 xml

$_doc = new DOMDocument( '1.0' , 'utf-8' );

// 排版格式

$_doc ->formatOutput = true ;

// 创建一个主标签

$_root = $_doc ->createElement( 'root' );

// 创建一个一级标签 version

$_version = $_doc ->createElement( 'version' );

// 给 version 标签里赋值

$_versionTextNode = $_doc ->createTextNode( '1.0' );

// 将值放入 version 标签里

$_version ->appendChild( $_versionTextNode );

// 将一级标签 version 放入 root 里

$_root ->appendChild( $_version );

// 将主标签写入 xml

$_doc ->appendChild( $_root );

// 生成 xml

$_doc ->save( 'aaa.xml' );


很多情况下 , 手工生成标记要求从上到下生成文档 , 必须保证标签都是完整的 , 开始和结束标签。尽管借助于一些 PHP 函数或类可以有所改善,不过 PHP 还提供了一组更有帮助的内置对象和函数。文档对象模型( Document Object Model , DOM )提供了一个树状结构,能很容易创建和处理标签。

三,小结

读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,<name>张映</name>.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。举个例子解释一下,
<data name='张映'  sex='男' old='28'></data>
xmlreader的设计重点是为了读data里面的name sex old的值,而读取<data></data>的内容就比较麻烦了。他相当于jquery中attr('');这个东西。

php操作xml类主要是针对xml文件夹一个读取查询删除数据例子,下面一起来看看,目前此类暂只支持三级节点哦。

文件名:xml.class.php

 代码如下 复制代码
/***
* *
* 文件名: xml.php *
* 作 用: xml类,完善中,暂只支持三级节点 *
* 作 者: loking(biyees) *
* *
* example 读取数据: *
* $xml = new xml(“dbase.xml”,’table’); *
* $data=$xml->xml_fetch_array(); *
* echo ”<pre style=\”font-size:12px;\”>”; *
* print_r($data); *
* *
******************/
class xml{
var $dbase; //数据库,要读取的XML文件
var $dbname; //数据库名称,顶层元素,与数据库文件名称一致
var $dbtable; //数据表,要取得的节点
var $parser; //剖析器
var $vals; //属性
var $index; //索引
var $dbtable_array;//节点数组
var $array; //下级节点的数组
var $result; //返回的结果
var $querys;
 
function xml($dbase,$dbtable){
$this->dbase=$dbase;
$this- >dbname=”document”;
$this- >dbtable=$dbtable;
$data=$this- >ReadXml($this->dbase);
if(!$data){
die( ”无法读取 $this->dbname.xml”);
}
$this- >parser = xml_parser_create();
xml_parser_set_option($this- >parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($this- >parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($this- >parser,$data,$this->vals,$this->index);
xml_parser_free($this- >parser);
//遍历索引,筛选出要取值的节点 节点名:$dbtable
foreach ($this- >index as $key=>$val) {
if ($key == $this- >dbtable) {
//取得节点数组
$this- >dbtable_array = $val;
} else {
continue;
}
}
for ($i=0; $i < count($this->dbtable_array); $i+=2) {
$offset = $this- >dbtable_array[$i] + 1;
$len = $this- >dbtable_array[$i + 1] - $offset;
//array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
//所取节点下级数组
$value=array_slice($this- >vals,$offset,$len);
//取得有效数组,合并为结果数组
$this- >array[]=$this->parseEFF($value);
}
return true;
}
//将XML文件读入并返回字符串
function ReadXml($file)
{
return file_get_contents($file);
}
//取得有效数组
function parseEFF($effective) {
for ($i=0; $i < count($effective); $i++){
$effect[$effective[$i][ "tag"]] = $effective[$i]["value"];
}
return $effect;
}
//xml_query(方法,条件,多条件时逻辑运算符and or or,总数据数组,插入或更新的数组)
function xml_query($method,$condition,$if=’and’,$array=array())
{
if(($method==’select’)||($method==’count’)){
return $this- >xml_select($method,$condition,$if);
} elseif($method==’insert’) {
return $this- >xml_insert($condition,$if,$array);
} elseif($method==’update’) {
return $this- >xml_update($condition,$if,$array);
}
}
//取得xml数组
function xml_fetch_array($condition,$if)
{
//$this- >querys++;
$row = $this- >array; //初始化数据数组
if($condition) {
//是否有条件,如有条件则生成符合条件的数组
//生成条件数组,条件格式 field,operator,match
$condition=explode( ”,”,$condition);//条件数组
$cs=count($condition)/3; //条件数
for($i=0;$i <$cs;$i++){
$conditions[]=array( ”field”=>$condition[$i*3],”operator”=>$condition[$i*3+1],”match”=>$condition[$i*3+2]);
}
//echo count($row);
for($r=0;$r <count($row);$r++){
for($c=0;$c <$cs;$c++){
//$i++;
$condition=$conditions[$c]; //当前条件
$field=$condition['field']; //字段
$operator=$condition[ "operator"];//运算符
$match=$condition['match']; //匹配
if(($operator==’=') &&($row[$r][$field]==$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’!=’) &&($row[$r][$field]!=$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’ <’)&&($row[$r][$field]<$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’ <=’)&&($row[$r][$field]<=$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’ >’)&&($row[$r][$field]>$match)){
$true++;//若条件符合,符合数加1
} elseif(($operator==’ >’)&&($row[$r][$field]>=$match)){
$true++;//若条件符合,符合数加1
}
}
//根据条件取值
if($if==’and’){
//如果多条件为and,当符合数等于条件数时,生成数组
if($true==$cs){
$result[]=$row[$r];
}
} else {
//如果多条件为or,当有符合纪录时,生成数组
if($true!=0){
$result[]=$row[$r];
}
}
//echo $true;
//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;
//print_r($true);
$true=0;//符合条件数归零,进入下一轮循环
}
} else {
$result=$this- >array;
}
//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;
//print_r($this- >result);
return $result;
}
//筛选或统计
function xml_select($method,$condition,$if)
{
$result=$this- >xml_fetch_array($condition,$if);
if($method==’select’){
return $result;
} else {
return count($result);
}
}
//插入数据
function xml_insert($condition,$if,$array)
{
$data=$this- >xml_fetch_array($condition,$if);//总数据数组
$data[]=$array; //插入后的总数据数组
$this- >array=$data; //更新总数组
$this- >WriteXml($data);
}
//得到更新的XML并改写
function xml_update($condition,$if,$array){
$datas=$this- >array; //总数据数组
$subtract=$this- >xml_fetch_array($condition,$if);//要更新的数组
//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;
//print_r($data);
//print_r($datas);
//echo ”每条记录中有“.count($datas[0]).”个值<br>”;
for($i=0;$i <count($datas);$i++){
$data=$datas[$i];
//echo ”原始记录中的第“.$i.”条<br>”;
foreach($data as $k= >$v){
//echo ”-第“.$i.”条的“.$k.”值为“.$v.”<br>”;
//echo ”–要查找的数组“.$k.”值为“.$subtract[0][$k].”<br>”;
if($v==$subtract[0][$k]){
$is++;
}
}
if($is==count($data)){
//echo ”—-与第“.$i.”条符合<br>”;
$datas[$i]=$array;
//array_splice($datas,$i,$i+1);
}
//echo ”原始记录中的第“.$i.”条与要查找的有“.$is.”匹配<br>”;
//echo ”原始记录中的第“.$i.”条结束<br>”;
$is=0;
}
//array_splice($datas,2,2+1,$array);
//echo ”<pre style=\”font-size:12px;\text-align:left\”>”;
//print_r($datas);
$this- >array=$datas;
$this- >WriteXml($datas);
 
}
//写入XML文件(全部写入)
function WriteXml($array)
{
if(!is_writeable($this- >dbase)){
die( ”无法写入“.$this->dbname.”.xml”);
}
$xml.= ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”;
$xml.= ”<$this->dbname>\r\n”;
for($i=0;$i <count($array);$i++){
$xml.= ”<$this->dbtable>\r\n”;
foreach($array[$i] as $k= >$s){
$xml.= ”<$k>$s</$k>\r\n”;
}
$xml.= ”</$this->dbtable>\r\n”;
}
$xml.= ”</$this->dbname>”;
dbase,”w’>$fp=@fopen($this->dbase,”w”);
flock($fp, LOCK_EX);
rewind($fp);
fputs($fp,$xml);
fclose($fp);
}
//逐行写入xml(我试着写入10000行,感觉没一次写入快,所以没用这种写入方式)
function WriteLine($array)
{
if(!is_writeable($this- >dbase)){
die( ”无法写入“.$this->dbname.”.xml”);
}
dbase,”w’>$fp=@fopen($this->dbase,”w”);
rewind($fp);
flock($fp, LOCK_EX);
fputs($fp, ”<?xml version=\”1.0\” encoding=\”gb2312\”?>\r\n”);
fputs($fp, ”<$this->dbname>\r\n”);
for($i=0;$i <count($array);$i++){
fputs($fp, ”<$this->dbtable>\r\n”);
$xml.= ”<$this->dbtable>\r\n”;
foreach($array[$i] as $k= >$s){
fputs($fp, ”<$k>$s</$k>\r\n”);
}
fputs($fp, ”</$this->dbtable>\r\n”);
}
fputs($fp, ”</$this->dbname>”);
fclose($fp);
}
}
?>
 

使用方法:

插入一条记录

 代码如下 复制代码

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$newarray = array(

“title”=>”XML标题“,

“text”=>”PHP的XML类测试!“

);

$insert=$xml->xml_query(‘insert’,”,”,$newarray);//第二及第三个变量位置是条件,留空表示在最后插入

修改记录

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$array = array(

“title”=>”XML标题“,

“text”=>”PHP的XML类测试!“

);

$insert=$xml->xml_query(‘update’,'title,=,20年后世界将会怎样?‘,’and’,$array);//title标签等于xxx的用$array替换(可以建唯一属性的标签,比如id,这样就可以修改某一条记录)

删除记录

 代码如下 复制代码

require_once(‘xml.class.php’);

$xml = new xml(“exemple.xml”,”item”);

$array = array();

$insert=$xml->xml_query(‘update’,'title,=,20年后世界将会怎样?‘,’and’,$array);//数组留空

备注

删除时其实是把值变空,我们可以修改一下xml_update(),在生成xml文件之前先判断$array的值,如果值为空就不写入到最终的数组中就是删除的效果了。

写入xml文件时速度粉快(我测试过30000条记录的情况),插入时只插入一条记录,修改速度也相当的快,挺适合中型网站生成XML时使用,所以推荐一下。

[!--infotagslink--]

相关文章

  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 美图秀秀把普通照片快速转换成卡通效果教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下把普通照片快速转换成卡通效果的教程,各位想知道具体制作步骤的使用者们,那么下面就快阿里跟着小编一起看一...2016-09-14
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • C# 拷贝数组的几种方法(总结)

    下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • PHP 二维数组根据某个字段排序的具体实现

    本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • 浅析C#数据类型转换的几种形式

    本篇文章是对C#中数据类型转换的几种形式进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • JavaScript实现数据类型的相互转换

    这篇文章主要为大家详细介绍了JavaScript实现数据类型的相互转换,感兴趣的朋友可以参考一下...2016-03-09
  • php中数组写入文件方法

    在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25