您的位置:首页 > 编程语言 > PHP开发

php写的 xml操作类

2009-12-18 10:31 295 查看
XML作为轻量级的数据库还是挺好用的,当XML不超过2M大小的时候读取速度还是很快的。以下提供我自己写的XML操作类。

如果用户想循环利用XML作为数据库的话,只要记录节点总数,当到达一个饱和数量时,又重新初始化XML即可。

<?php

class requirelog

{

protected static $requirelog;

//get ready for xml,if xml is not found ,create xml

static function _initializeLog()

{

if(file_exists('requirelog.xml'))

{

self::$requirelog = DOMDocument::load('requirelog.xml');

}

else

{

self::$requirelog = new DOMDocument('1.0', 'iso-8859-1');

self::$requirelog->loadXML('<?xml version="1.0" encoding="UTF-8"?><contents></contents>');

self::$requirelog->save('requirelog.xml');

}

}

//获取finish字段全部为0的所有节点

public static function get_entrys()

{

self::_initializeLog();

$entrys = self::$requirelog->getElementsByTagName('entry');

$entry_arrays = array();

foreach($entrys as $entry)

{

if($entry->getElementsByTagName('finish')->item(0)->nodeValue == 0)

{

$entry_array = array();

$entry_array['id'] = $entry->getElementsByTagName('id')->item(0)->nodeValue;

$entry_array['time'] = $entry->getElementsByTagName('time')->item(0)->nodeValue;

$entry_array['operator'] = $entry->getElementsByTagName('operator')->item(0)->nodeValue;

$entry_array['byoperator'] = $entry->getElementsByTagName('byoperator')->item(0)->nodeValue;

$entry_array['parameters1'] = $entry->getElementsByTagName('parameters1')->item(0)->nodeValue;

$entry_array['parameters2'] = $entry->getElementsByTagName('parameters2')->item(0)->nodeValue;

$entry_array['parameters3'] = $entry->getElementsByTagName('parameters3')->item(0)->nodeValue;

$entry_array['type'] = $entry->getElementsByTagName('type')->item(0)->nodeValue;

$entry_array['module'] = $entry->getElementsByTagName('module')->item(0)->nodeValue;

$entry_array['finish'] = $entry->getElementsByTagName('finish')->item(0)->nodeValue;

$entry_arrays[] = $entry_array;

}

}

return $entry_arrays;

}

//获取所有的节点

public static function get_count_entrys()

{

self::_initializeLog();

$entrys = self::$requirelog->getElementsByTagName('entry');

$entry_arrays = array();

foreach($entrys as $entry)

{

$entry_array = array();

$entry_array['id'] = $entry->getElementsByTagName('id')->item(0)->nodeValue;

$entry_array['time'] = $entry->getElementsByTagName('time')->item(0)->nodeValue;

$entry_array['operator'] = $entry->getElementsByTagName('operator')->item(0)->nodeValue;

$entry_array['byoperator'] = $entry->getElementsByTagName('byoperator')->item(0)->nodeValue;

$entry_array['parameters1'] = $entry->getElementsByTagName('parameters1')->item(0)->nodeValue;

$entry_array['parameters2'] = $entry->getElementsByTagName('parameters2')->item(0)->nodeValue;

$entry_array['parameters3'] = $entry->getElementsByTagName('parameters3')->item(0)->nodeValue;

$entry_array['type'] = $entry->getElementsByTagName('type')->item(0)->nodeValue;

$entry_array['module'] = $entry->getElementsByTagName('module')->item(0)->nodeValue;

$entry_array['finish'] = $entry->getElementsByTagName('finish')->item(0)->nodeValue;

$entry_arrays[] = $entry_array;

}

return $entry_arrays;

}

//根据ID获取节点

public static function get_entry($id)

{

self::_initializeLog();

$count=count(self::get_count_entrys());

if($count > 0)

{

$entrys = self::$requirelog->getElementsByTagName('entry');

foreach($entrys as $entry)

{

if ($id == $entry->getElementsByTagName('id')->item(0)->nodeValue)

{

$entry_array = array();

$entry_array['id'] = $entry->getElementsByTagName('id')->item(0)->nodeValue;

$entry_array['time'] = $entry->getElementsByTagName('time')->item(0)->nodeValue;

$entry_array['operator'] = $entry->getElementsByTagName('operator')->item(0)->nodeValue;

$entry_array['byoperator'] = $entry->getElementsByTagName('byoperator')->item(0)->nodeValue;

$entry_array['parameters1'] = $entry->getElementsByTagName('parameters1')->item(0)->nodeValue;

$entry_array['parameters2'] = $entry->getElementsByTagName('parameters2')->item(0)->nodeValue;

$entry_array['parameters3'] = $entry->getElementsByTagName('parameters3')->item(0)->nodeValue;

$entry_array['type'] = $entry->getElementsByTagName('type')->item(0)->nodeValue;

$entry_array['module'] = $entry->getElementsByTagName('module')->item(0)->nodeValue;

$entry_array['finish'] = $entry->getElementsByTagName('finish')->item(0)->nodeValue;

return $entry_array;

}

}

}

else

return null;

}

//执行完用户请求,更改finsh字段

public static function do_finsh($id)

{

self::_initializeLog();

$entrys = self::$requirelog->getElementsByTagName('entry');

$entry_arrays = array();

foreach($entrys as $entry)

{

if($entry->getElementsByTagName('id')->item(0)->nodeValue == $id)

{

$entry->getElementsByTagName('finish')->item(0)->nodeValue = 1;

}

}

self::$requirelog->save('requirelog.xml');

}

//增加新节点,$operator为操作者,$byoperator是被操作对象,$parameters1,2,3为可扩展的参数,$type为类型,$module为影响的模块

static function add_entry($operator,$byoperator,$parameters1,$parameters2,$parameters3,$type,$module)

{

//$contents = self::$restlog->getElementsByTagName('contents');

self::_initializeLog();

$count=count(self::get_count_entrys());

$entry = self::$requirelog->createElement('entry');

$id = self::$requirelog->createElement('id');

$idvalue = self::$requirelog->createTextNode($count+1);

$id->appendChild($idvalue);

$time = self::$requirelog->createElement('time');

$timevalue = self::$requirelog->createTextNode(date("Y-m-d H:i:s",time()));

$time->appendChild($timevalue);

$op = self::$requirelog->createElement('operator');

$opvalue = self::$requirelog->createTextNode($operator);

$op->appendChild($opvalue);

$bop = self::$requirelog->createElement('byoperator');

$bopvalue = self::$requirelog->createTextNode($byoperator);

$bop->appendChild($bopvalue);

$ps1 = self::$requirelog->createElement('parameters1');

$ps1value = self::$requirelog->createTextNode($parameters1);

$ps1->appendChild($ps1value);

$ps2 = self::$requirelog->createElement('parameters2');

$ps2value = self::$requirelog->createTextNode($parameters2);

$ps2->appendChild($ps2value);

$ps3 = self::$requirelog->createElement('parameters3');

$ps3value = self::$requirelog->createTextNode($parameters3);

$ps3->appendChild($ps3value);

$tp = self::$requirelog->createElement('type');

$tpvalue = self::$requirelog->createTextNode($type);

$tp->appendChild($tpvalue);

$md = self::$requirelog->createElement('module');

$mdvalue = self::$requirelog->createTextNode($module);

$md->appendChild($mdvalue);

$fi = self::$requirelog->createElement('finish');

$fivalue = self::$requirelog->createTextNode(0);

$fi->appendChild($fivalue);

$entry->appendChild($id);

$entry->appendChild($time);

$entry->appendChild($op);

$entry->appendChild($bop);

$entry->appendChild($ps1);

$entry->appendChild($ps2);

$entry->appendChild($ps3);

$entry->appendChild($tp);

$entry->appendChild($md);

$entry->appendChild($fi);

self::$requirelog->documentElement->appendChild($entry);

self::$requirelog->save('requirelog.xml');

return 1;

}

}

?>

requirelog.xml的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<contents>
<entry>
<id>1</id>
<time>2009-11-21 16:56:33</time>
<operator>peng.zhou</operator>
<byoperator>zxcxzcxzczxcxz</byoperator>
<parameters1>cxzcxzc</parameters1>
<parameters2/>
<parameters3/>
<type>add_group</type>
<module>cn_group</module>
<finish>1</finish>
</entry>
<entry>
<id>2</id>
<time>2009-11-21 16:56:53</time>
<operator>peng.zhou</operator>
<byoperator>sales</byoperator>
<parameters1/>
<parameters2/>
<parameters3/>
<type>add_member</type>
<module>mail_group</module>
<finish>1</finish>
</entry>
</contents>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: