龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

使用DOM复制(克隆)指定节点名数据到新的XML文

时间:2014-07-22 14:52来源: 作者: 点击:
分享到:
<无详细内容>
<?php
/*
<?xml version="1.0" encoding="utf-8"?>
<article>
	<item>
		<title name="t1"></title>
		<content>content1</content>
		<pubdate>2009-10-11</pubdate>
	</item>
	<item>
		<title name="t2">title2</title>
		<content>content2</content>
		<pubdate>2009-11-11</pubdate>
	</item>
</article>
*/
/*
使用DOM复制(克隆)指定节点名数据到新的XML文件中 ,用到三个类的相关知识点 : 
DOMDocument - DOMNodeList - DOMNode
1.DOMNodeList DOMDocument::getElementsByTagName ( string $name )
2.DOMNode DOMNodelist::item ( int $index )
3.DOMNode DOMNode::cloneNode ([ bool $deep ] )
*/
if(!function_exists('l')) {
	function l() {
		echo '<br />********************************<br />';
	}
}
if(!function_exists('cp_xml')) {
	/* 
	 * 复制指定节点元素信息到新XML文件中
	 * @param  $dom : 源XML文件的DOM对象
	 * @param  $newdom : 新XML文件的DOM对象
	 * @param  $node: 指定复制的节点元素名
 	 * @param  $file: 新生成的XML文件名
	 * @param  $attribute: 指定复制的节点元素的属性名
	 * @return void
	*/
	function cp_xml($dom,$newdom,$node,$file,$attribute = '') {
		$contents = $dom->getElementsByTagName($node);
		$clone = array();
		$attr = array();
		for($i = 0 ; $i<$contents->length; $i++) {
			$node = $contents->item($i);
			if($node->hasAttributes() && !empty($attribute)) {
				$attr[] = $node->getAttribute($attribute);
			}
			$clone[] = $node->cloneNode(true);
		}
		
		var_dump($attr);  //debug
		
		$root = $newdom->createElement('root');
		$newdom->appendChild($root);
		
		for($i = 0 ; $i<count($clone); $i++) {
			$title = $newdom->createElement($clone[$i]->nodeName,$clone[$i]->nodeValue);
			$root->appendChild($title);
			
			if(count($attr)>0 && !empty($attribute)) {
				//创建属性名
				$aname = $newdom->createAttribute($attribute);
				$title->appendChild($aname);
				
				//传递属性值
				$aval = $newdom->createTextNode($attr[$i]);
				$aname->appendChild($aval);
			}
		}

		$newdom->save($file);
	}
}
if(file_exists("test10_12.xml")) {
	//实例一
	$dom = new DOMDocument();
	$newdom = new DOMDocument('1.0','utf-8');
	$dom->load("test10_12.xml");

	$node = 'content';
	$file = '11_1.xml';
	cp_xml($dom,$newdom,$node,$file);
	
	//实例二
	$dom = new DOMDocument();
	$newdom = new DOMDocument('1.0','utf-8');
	$dom->load("test10_12.xml");
	
	$node = 'title';
	$file = '11_2.xml';
	cp_xml($dom,$newdom,$node,$file,$attribute = 'name');
	
}
/*End of PHP*/
精彩图集

赞助商链接