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

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

时间:2015-04-09 11:00来源:网络整理 作者:网络 点击:
分享到:
使用DOM复制(克隆)指定节点名数据到新的XML文件中 **[PHP]代码**[代码片段(94行)]

[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*/
精彩图集

赞助商链接