首页  >  文章  >  php教程  >  使用DOM复制(克隆)指定节点名数据到新的XML文件中

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

PHP中文网
PHP中文网原创
2016-05-25 17:13:371118浏览

[代码][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(&#39;l&#39;)) {
    function l() {
        echo &#39;<br />********************************<br />&#39;;
    }
}
if(!function_exists(&#39;cp_xml&#39;)) {
    /* 
     * 复制指定节点元素信息到新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 = &#39;&#39;) {
        $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(&#39;root&#39;);
        $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(&#39;1.0&#39;,&#39;utf-8&#39;);
    $dom->load("test10_12.xml");
 
    $node = &#39;content&#39;;
    $file = &#39;11_1.xml&#39;;
    cp_xml($dom,$newdom,$node,$file);
     
    //实例二
    $dom = new DOMDocument();
    $newdom = new DOMDocument(&#39;1.0&#39;,&#39;utf-8&#39;);
    $dom->load("test10_12.xml");
     
    $node = &#39;title&#39;;
    $file = &#39;11_2.xml&#39;;
    cp_xml($dom,$newdom,$node,$file,$attribute = &#39;name&#39;);
     
}
/*End of PHP*/


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn