php对xml文件中节点编辑

在php开发中经常碰到一下配置项的参数,很多情况下可以使用数据库进行存储我们的配置参数,但有时候配置的参数比较少这时候可以考虑时候xml的读写操作实现相应功能。下面是我自己整理出来的一个完整例子,包括xml的读写和html页面ui上的显示操作。这是完整的编辑界面效果图:


xml文件

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<bisys>
  <item>
  		<name>serverip</name>
		<type>字符串</type>
		<value>localhost</value>
		<describe>服务器ip</describe>
  </item>
  <item>
  		<name>timezone</name>
		<type>整型</type>
		<value>0</value>
		<describe>时区</describe>
  </item>
  <item>
  		<name>pagesize</name>
		<type>整型</type>
		<value>50</value>
		<describe>每页大小</describe>
  </item>
  <item>
  		<name>pageseperator</name>
		<type>字符串</type>
		<value>#</value>
		<describe>页面分割符</describe>
  </item>
  <item>
  		<name>idseperator</name>
		<type>字符串</type>
		<value>%sdf</value>
		<describe>ID分割符</describe>
  </item>
  <item>
  		<name>firstscreennum</name>
		<type>整型</type>
		<value>8</value>
		<describe>第一屏数量</describe>
  </item>
  <item>
  		<name>timeweight</name>
		<type>整型</type>
		<value>1000</value>
		<describe>时间权重参数</describe>
  </item>
</bisys>

读取xml操作函数

/**
功能:
	根据输入的xml文件输出php数组
输入:
	$FILE: xml文件,格式要求是
	...
	<item>
  		<name>...</name>
		<type>...</type>
		<value>...</value>
		<describe>...</describe>
	</item>
	...
返回:
	数组
	数组格式是<br />
	array[][name]
	array[][type]
	array[][value]
	array[][describe]
*/
function getXmlItem($file)
{
	$DOC = new DOMDocument('1.0','UTF-8');
	$DOC->load($file);
	$items = $DOC->getElementsByTagName('item');
	$i=0;
	foreach( $items as $item )
	{
		$its = $item->getElementsByTagName( "name" );
		$name = $its->item(0)->nodeValue;
		$it[$i][name] = $name ;
		
		$its = $item->getElementsByTagName( "type" );
		$it[$i][type] = $its->item(0)->nodeValue;
		
		$its = $item->getElementsByTagName( "value" );
		$it[$i][value] = $its->item(0)->nodeValue;
		
		$its = $item->getElementsByTagName( "describe" );
		$it[$i][describe] = $its->item(0)->nodeValue;
		//echo $it[$i][name] ."<br>";
		$i++;
	}
	//print_r($it);
	return $it;
}

写xml操作函数

/**
功能:
	根据data数组内容保存到xml的value一项
输入:
	$FILE: xml文件,格式要求是
	...
	<item>
  		<name>...</name>
		<type>...</type>
		<value>...</value>
		<describe>...</describe>
	</item>
	...
	$data:数组值
返回:
*/

function saveXml($file,$data)
{
	if(NULL==$data)
	{
		return ;
	}
	$DOC = new DOMDocument('1.0','UTF-8');
	$DOC->load($file);
	$items = $DOC->getElementsByTagName('item');
	$flag=0;
	$i=0;
	/*修改参数*/
	foreach( $items as $item )
	{
		$its = $item->getElementsByTagName( "value" );
		$name = $its->item(0)->nodeValue;
		$child=$its->item(0);
		if($name != $data[$i])
		{
			$item->replaceChild(new DOMElement("value", $data[$i]), $child);
			$flag=1;
		}
		$i++;
	}
	
	/*保存文件*/
	if(1==$flag)
	{
		$DOC->formatOutput = true;
		$DOC->saveXML();
		$DOC->save($file);
	}
	else
	{
		//echo "save nothing";
	}
}

在家中xml的时候注意设置xml的编码方式,以免在保存的时候出现中文乱码的现象

$DOC = new DOMDocument('1.0','UTF-8');


点击这里下载完整的代码。

参考文章

http://www.kukaka.org/home/content/148

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值