zoukankan      html  css  js  c++  java
  • php中DOMDocument简单用法(XML创建、添加、删除、修改)

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

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

    //index.php 创建功能

    <?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';

    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XML操作</title>
    </head>

    <body>
    </body>
    </html>

    //add.php 增加功能(跟index.php文件差不多,主要就是加个load载入跟 $root = $doc -> documentElement获得跟节点

    <?php
    $xmlpatch = 'index.xml';
    $_id = '2';
    $_title = 'title2';
    $_content = 'content2';
    $_author = 'author2';
    $_sendtime = 'time2';
    $_htmlpatch = '2.html';

    $doc = new DOMDocument();
    $doc -> formatOutput = true;
    if($doc -> load($xmlpatch)) {
    $root = $doc -> documentElement;//获得根节点(root)
    $index = $doc -> createElement('index');

    $url = $doc -> createAttribute('url');
    $patch = $doc -> createTextNode($_htmlpatch);
    $url -> appendChild($patch);

    $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);
    $index -> appendChild($title);
    $index -> appendChild($content);
    $index -> appendChild($url);
    $index -> appendChild($author);
    $index -> appendChild($sendtime);

    $root -> appendChild($index);

    $doc -> save($xmlpatch);

    echo $_id . ' has been added in ' . $xmlpatch;

    } else {
    echo 'xml file loaded error!';
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XML操作-添加</title>
    </head>

    <body>
    </body>
    </html>

    //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!';
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XML操作-修改</title>
    </head>

    <body>
    </body>
    </html>

    //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!';
    }

    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>XML操作-删除</title>
    </head>

    <body>
    </body>
    </html>

    总结一下,创建跟添加主要用的就是create跟appendChild,create后边跟Element就是创建节点,跟Attribute就是创建属性,TextNode就是创建值,然后appendChild就是设置从属关系,这么一看非常简单。

    删除与修改都是用先获得节点列表getElementsByTagName然后foreach遍历想要修改的节点

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/shangbolei/p/4738554.html
Copyright © 2011-2022 走看看