zoukankan      html  css  js  c++  java
  • ZH奶酪:PHP 使用DOMDocument操作XML

    原文链接:http://my.oschina.net/zhangb081511/blog/160113

    PHP写XML方法很多,这里主要介绍一下DOMDocument的用法,跟 JS大体上相同,其实非常简单。[PHP XML DOM链接]

    共分四个文件,分别是创建、增加、删除、修改四个功能,变量都是写死的,改一改用$_POST方式接收就可以用了

    TEST_PAGE

    <?php
    $xmlpatch = 'index.xml';
    $_id = '1';
    $_title = 'title1';
    $_content = 'content1';
    $_author = 'author1';
    $_sendtime = 'time1';
    $_htmlpatch = '1.html';
     
    $doc = new DOMDocument('1.0', 'utf-8');
    $doc -> formatOutput = true;
     
    $root = $doc -> createElement('root');//新建节点
     
    $index = $doc -> createElement('index');//新建节点
     
    $url = $doc -> createAttribute('url');//新建属性
    $patch = $doc -> createTextNode($_htmlpatch);//新建TEXT值
    $url -> appendChild($patch);//将$patch文本设为$url属性的值
     
    $id = $doc -> createAttribute('id');
    $newsid = $doc -> createTextNode($_id);
    $id -> appendChild($newsid);
     
    $title = $doc -> createAttribute('title');
    $newstitle = $doc -> createTextNode($_title);
    $title -> appendChild($newstitle);
     
    $content = $doc -> createTextNode($_content);//节点值
     
    $author = $doc -> createAttribute('author');
    $newsauthor = $doc -> createTextNode($_author);
    $author -> appendChild($newsauthor);
     
    $sendtime = $doc -> createAttribute('time');
    $newssendtime = $doc -> createTextNode($_sendtime);
    $sendtime -> appendChild($newssendtime);
     
    $index -> appendChild($id);//将$id设为index节点的属性,以下类同
    $index -> appendChild($title);
    $index -> appendChild($content);
    $index -> appendChild($url);
    $index -> appendChild($author);
    $index -> appendChild($sendtime);
     
    $root -> appendChild($index);//设置index为root字节点
     
    $doc -> appendChild($root);//设置root为跟节点
     
    $doc -> save($xmlpatch);//保存文件
     
    echo $xmlpatch . ' has create success';
     
    ?>

    ADD

    <p>
    //add.php 增加功能(跟index.php文件差不多,主要就是加个load载入跟 $root = $doc -> do//cumentElement获得跟节点
    </p>
     
    <p>
    $xmlpatch = 'index.xml';
    $_id = '2';
    $_title = 'title2';
    $_content = 'content2';
    $_author = 'author2';
    $_sendtime = 'time2';
    $_htmlpatch = '2.html';
    </p>
     
    <p>
    $doc = new DOMDocument();
    $doc -> formatOutput = true;
    if($doc -> load($xmlpatch)) {
    $root = $doc -> documentElement;//获得根节点(root)
    $index = $doc -> createElement('index');
    </p>
     
    <p>
    $url = $doc -> createAttribute('url');
    $patch = $doc -> createTextNode($_htmlpatch);
    $url -> appendChild($patch);
    </p>
     
    <p>
    $id = $doc -> createAttribute('id');
    $newsid = $doc -> createTextNode($_id);
    $id -> appendChild($newsid);
    </p>
     
    <p>
    $title = $doc -> createAttribute('title');
    $newstitle = $doc -> createTextNode($_title);
    $title -> appendChild($newstitle);
    </p>
     
    <p>
    $content = $doc -> createTextNode($_content);
    </p>
     
    <p>
    $author = $doc -> createAttribute('author');
    $newsauthor = $doc -> createTextNode($_author);
    $author -> appendChild($newsauthor);
    </p>
     
    <p>
    $sendtime = $doc -> createAttribute('time');
    $newssendtime = $doc -> createTextNode($_sendtime);
    $sendtime -> appendChild($newssendtime);
    </p>
     
    <p>
    $index -> appendChild($id);
    $index -> appendChild($title);
    $index -> appendChild($content);
    $index -> appendChild($url);
    $index -> appendChild($author);
    $index -> appendChild($sendtime);
    </p>
     
    <p>
    $root -> appendChild($index);
    </p>
     
    <p>
    $doc -> save($xmlpatch);
    </p>
     
    <p>
    echo $_id . ' has been added in ' . $xmlpatch;
    </p>
     
    <p>
    } else {
    echo 'xml file loaded error!';
    }
    </p>
     
    <p>
    }
    </p>

    UPDATE

    //edit.php 修改功能(这里只修改title属性值 跟节点值)
     
    <?php
    $xmlpatch = 'index.xml';
    $_id = '2';
    $_title = 'has been changed';
    $_content = 'has been changed';
     
    $doc = new DOMDocument();
    $doc -> formatOutput = true;
     
    if($doc -> load($xmlpatch)) {
    $root = $doc -> documentElement;
    $elm = $root -> getElementsByTagName('index');
    $checkexist = 0;
    foreach ($elm as $new) {
       if($new -> getAttribute('id') == $_id) {
        $new -> setAttribute('title', $_title);
        $new -> nodeValue = $_content;//修改节点值,真是太意外了,没想到跟JS一样直接能赋值...
        //$new -> removeChild($new -> nodevalue);
        $checkexist = 1;
       }
    }
    if($checkexist == 0) {
       echo $_id . ' is not found in ' . $xmlpatch;
    } else {
       $doc -> save($xmlpatch);
       echo $_id . ' has been changed';
    }
    } else {
    echo 'xml file loaded error!';
    }
     
    ?>

    DELETE

    //del.php 删除功能
     
    <?php
    $xmlpatch = 'index.xml';
    $_id = '2';
     
    $doc = new DOMDocument();
    $doc -> formatOutput = true;
    if($doc -> load($xmlpatch)) {
    $root = $doc -> documentElement;
    $elm = $root -> getElementsByTagName('index');
    foreach ($elm as $new) {
       if($new -> getAttribute('id') == $_id) {
        if($root -> removeChild($new)) {
         echo $_id . ' has been deleted';
        } else {
         echo $_id . ' delete failed';
        }
       }
    }
    $doc -> save($xmlpatch);
    } else {
    echo 'xml file loaded error!';
    }
     
    ?>
  • 相关阅读:
    2017ccpc全国邀请赛(湖南湘潭) E. Partial Sum
    Codeforces Round #412 C. Success Rate (rated, Div. 2, base on VK Cup 2017 Round 3)
    2017 中国大学生程序设计竞赛 女生专场 Building Shops (hdu6024)
    51nod 1084 矩阵取数问题 V2
    Power收集
    红色的幻想乡
    Koishi Loves Segments
    Wood Processing
    整数对
    Room and Moor
  • 原文地址:https://www.cnblogs.com/CheeseZH/p/4858299.html
Copyright © 2011-2022 走看看