使用DOM复制(克隆)指定节点名数据到新的XML文件中
程序员文章站
2022-03-10 11:57:55
...
[代码][PHP]代码
<?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*/
上一篇: Java对象的强、软、弱和虚引用