<?php
/*
*作者:pangmen
*日期:2007-11-14
*功能:操作XML文件(增、删、改、查)
*版本:正则版
*附:大家可以随意修改此类,合适的话发我一份:)
* 我的E-mail:ad2008bobo@yahoo.com.cn
*/
class OpXML
{
private $fpath;
private $enter;
private $root;
function __construct($root,$fpath)
{
$this->fpath=$fpath;
$this->root=$root;
$this->enter=chr(13).chr(10);
$this->checkFile();
}
/*
*函数名:insert
*说明:插入一条记录
*/
public function insert($fields)
{
$content=$this->getFileContent();
preg_match_all('|<key>(\d+?)<\/key>|',$content,$matches);
rsort($matches[1]);
$newkey=$matches[1][0]+1;
$record='<record>'.$this->enter;
$record.='<key>'.$newkey.'</key>'.$this->enter;
foreach($fields as $k=>$v)
{
$record.="<$k>$v</$k>".$this->enter;
}
$record.='</record>'.$this->enter.$this->enter;
$this->save(preg_replace('/(?=<\/'.$this->root.'>)/',$record,$content));
return true;
}
/*
*函数名:insertM
*说明:插入多条记录,参数类型必须是二维数组
*/
public function insertM($arr)
{
$content=$this->getFileContent();
preg_match_all('|<key>(\d+?)<\/key>|',$content,$matches);
rsort($matches[1]);
$newkey=$matches[1][0]+1;
$record='';
for($i=0;$i<count($arr);$i++)
{
$record.='<record>'.$this->enter;
$record.='<key>'.$newkey.'</key>'.$this->enter;
foreach($arr[$i] as $k=>$v)
{
$record.="<$k>$v</$k>".$this->enter;
}
$record.='</record>'.$this->enter.$this->enter;
$newkey++;
}
$this->save(preg_replace('/(?=<\/'.$this->root.'>)/',$record,$content));
return true;
}
/*
*函数名:checkFile
*说明:如果文件不存在,则创建之,并初始化
* 否则检查文件规则是否被破坏
*/
private function checkFile()
{
if(!file_exists($this->fpath))
{
$xmlstr='';
$xmlstr='<?xml version="1.0" encoding="UTF-8"?>'.$this->enter;
$xmlstr.='<'.$this->root.'>'.$this->enter.$this->enter;
$xmlstr.='</'.$this->root.'>';
$this->save($xmlstr);
}
else
{
$content=$this->getFileContent();
$bool_statement=preg_match('/<\?xml version="1\.0".*?\?>/',$content)==0 ? false : true;
$bool_root=preg_match('/<'.$this->root.'>.*<\/'.$this->root.'>/s',$content)==0 ? false : true;
preg_match_all('|(<record>(?:.+?)<\/record>)|s',$content,$matches);
for($i=0;$i<count($matches[1]);$i++)
{
$re='/^<record>\s*<key>(\d+)<\/key>\s*[\s\S]*\s*<\/record>$/';
$bool_record=preg_match($re,$matches[1][$i],$arr)==0 ? false : true;
$keys[]=$arr[1];
if(!$bool_record) break;
}
rsort($keys);
$bool_repeat=preg_match('/(\d),\1/',join(',',$keys),$wb)==0 ? true : false;
if(!($bool_statement && $bool_root && $bool_record && $bool_repeat))
{
echo '文件规则已被破坏';
exit;
}
}
}
/*
*函数名:getRecordById
*说明:根据主键ID,获取字段信息
*/
public function getRecordById($id)
{
$content=$this->getFileContent();
preg_match('/<record>(\s*<key>'.$id.'<\/key>.+?)<\/record>/s',$content,$matches);
preg_match_all('|(<.+</.+>)|',$matches[1],$arr);
$arrstr='';
for($i=0;$i<count($arr[1]);$i++)
{
preg_match('/^.+>(.+)<\/(.+)>/',$arr[1][$i],$farr);
$arrstr.="'$farr[2]'=>'$farr[1]'";
if($i<count($arr[1])-1) $arrstr.=',';
}
eval("\$row=array($arrstr);");
return $row;
}
/*
*函数名:checkFile
*说明:根据主键ID,更新字段
*/
public function updateRecordById($id,$form_arr=array())
{
$content=$this->getFileContent();
foreach($form_arr as $k=>$v)
{
$re='/(<key>'.$id.'<\/key>[\s\S]*?<'.$k.'>).+?(<\/'.$k.'>)/s';
$content=preg_replace($re,'$'.$v.'$2',$content);
}
$this->save($content);
return true;
}
public function deleteRecordById($id)
{
$content=$this->getFileContent();
$content=preg_replace('/<record>\s*<key>'.$id.'+.+?<\/record>(\s)?/s','',$content);
$this->save($content);
}
/*
*函数名:getList
*说明:获取所有记录,返回一个二维数组
* 先获取所有record记录,再获取字段名和值
*/
public function getList()
{
$content=$this->getFileContent();
$rs=array();
preg_match_all('|<record>(.+?)<\/record>|s',$content,$matches);
for($i=0;$i<count($matches[1]);$i++)
{
preg_match_all('|(<.+</.+>)|',$matches[1][$i],$tmparr);
$arrstr='';
for($j=0;$j<count($tmparr[1]);$j++)
{
preg_match('/^.+>(.+)<\/(.+)>/',$tmparr[1][$j],$farr);
$arrstr.="'$farr[2]'=>'$farr[1]'";
if($j<count($tmparr[1])-1) $arrstr.=',';
}
eval("\$rs[]=array($arrstr);");
}
return $rs;
}
private function getFileContent()
{
$hd=fopen($this->fpath,'r');
$content=fread($hd,filesize($this->fpath));
fclose($hd);
return $content;
}
private function save($content)
{
$hd=fopen($this->fpath,'w');
fwrite($hd,$content);
fclose($hd);
}
}
?>
下面是应用示例
header('content-type: text/html; charset=utf-8');
include('./libs/x.class.php');
$rootname='ROOT';//根标签名
$fpath='./libs/ooooooooooooooo.xml';//文件的路径,不用手动创建文件
$x=new OpXML('ROOT',$fpath);
//增
$arr=array('username'=>'pangmen','sex'=>'男','tel'=>'139999999','address'=>'北京');
$x->insert($arr);
//删
//$x->deleteRecordById(1);
//改
//$arr=array('username'=>'pangmen','sex'=>'男','tel'=>'139999999','address'=>'北京');
//$x->updateRecordById(1,$arr);
//查(一条记录)
//print_r($x->getRecordById(1));
//查(所有记录)
//print_r($x->getList());
分享到:
相关推荐
QT_DOM方式操作xml文件增删改查 博文参考: https://txwtech.blog.csdn.net/article/details/126321336?spm=1001.2014.3001.5502
在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文将深入探讨XML的全方面操作,包括创建、解析、修改和查询。 首先,让我们来看看如何创建XML文档。一个基本的...
在提供的视频资源"17-dom4j解析xml文档(增删改查).avi"中,可能详细展示了这些操作的步骤和示例,观看该视频将进一步加深你对DOM4J操作XML的理解。记得实践是检验理论的最好方式,动手操作会让你更好地掌握这些知识...
在C#中进行XML文件的增删改查操作是一种常见的数据处理方式,尤其适用于轻量级数据存储或配置文件管理。下面将详细解析如何在C#中实现对XML文件的基本操作,包括创建、读取、更新和删除。 ### 创建XML文件 首先,...
本篇文章将深入探讨如何在Qt环境下进行XML文档的操作,包括增、删、改、查等常见功能。 首先,Qt中的`QDomDocument`类是用于解析和操作XML文档的核心类。它基于DOM(Document Object Model)模型,允许开发者以树形...
本实例将深入探讨如何对XML进行增删改查等基本操作。 首先,XML的基本结构包括元素(Element)、属性(Attribute)、文本内容(Text Content)、注释(Comment)、处理指令(Processing Instruction)等。在XML文...
C#作为.NET框架的主要编程语言,提供了丰富的API支持XML的处理,使得开发者能够轻松地对XML文件进行增、删、改、查等操作。下面我们将深入探讨这些操作的具体实现。 首先,让我们了解C#如何创建和读取XML文件。在C#...
JAVA作为一款跨平台的编程语言,提供了丰富的API来操作XML,本篇将重点讲解如何使用JAVA进行XML的增删改查操作。 首先,从"JAVA 操作 XML 增删改查"这个标题来看,我们可以预知内容将涵盖XML文件的基本操作。这些...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的方式来解析、创建、修改和查询XML文档,是Java开发中的一个常用...通过实践这些基本操作,开发者可以轻松地在自己的项目中实现XML的增删改查功能。
本示例中,"winform对xmL的增删改查"实现了在WinForm应用程序中对XML文件的操作,包括添加数据、删除数据、修改数据以及查询数据。以下是关于这些操作的详细解释: 1. **XML文件的读取**: - 使用`System.Xml`命名...
### Flex操作XML实现增删改查 在Flex中操作XML数据是进行动态内容处理的关键技能之一。本篇文章将深入探讨如何使用Flex中的XML类来实现对XML数据的增、删、改、查功能。 #### 一、理解XML结构 XML(可扩展标记...
要实现对XML文件的增、删、改、查操作,我们需要使用Java的标准库JAXB(Java Architecture for XML Binding)或者DOM(Document Object Model)、SAX(Simple API for XML)等解析器。下面将详细介绍这些操作的具体...
在这个“对XML进行增删改查例子”中,我们将探讨如何操作XML文档,包括添加新节点、删除已有节点、修改现有节点内容以及查询XML结构中的特定信息。 1. **XML的基本结构** XML文档由一系列元素组成,每个元素都有一...
本教程将深入探讨如何使用XML进行增删改查的操作,并提供相应的Java源代码示例。 首先,我们需要理解XML的基本结构。XML文档由元素构成,元素通过标签来定义,如`<element>`...`</element>`。属性是附加在元素上的...
在本"XML课程设计实现增删改查"项目中,我们聚焦于如何使用XML进行数据存储,并通过Java编程实现对这些数据的CRUD(创建Create、读取Read、更新Update、删除Delete)操作。 XML的基本结构包括元素(Element)、属性...
### XML配置实现增删改查介绍 #### 一、引言 在软件开发过程中,为了提高系统的灵活性和可维护性,通常会采用配置文件来控制应用程序的行为。其中,XML(Extensible Markup Language,可扩展标记语言)作为一种广泛...
本资源提供了XML的增删改查功能的源代码实现,帮助学习者快速掌握如何在实际项目中操作XML文档。下面将详细解释XML的基本概念以及如何实现增删改查功能。 XML的结构: XML文档由元素、属性、文本内容、注释等构成。...
【Asp+xml 实现增删改查】是一个关于使用ASP技术对XML文件进行基本操作的教程。在Web开发中,XML(eXtensible Markup Language)常被用作数据存储和交换格式,因为它具有结构清晰、易于解析和跨平台的特点。ASP...
当处理小规模数据时,PHP的内置类`SimpleXMLElement`提供了一种简单的方法来操作XML文件,包括增加、删除、修改和查询数据。下面将详细介绍如何使用`SimpleXMLElement`实现这些功能,以及如何对XML数据进行正序、...
总的来说,`XMLUtil.java`是一个实用的工具类,它封装了XML处理的常见操作,使得开发者能更便捷地对XML文件进行增删改查。通过理解和使用此类,我们可以高效地处理XML数据,提高代码的可维护性和灵活性。不过,为了...