• PHP简单读取XML


    DOM

    document object model,文档对象模型,就是树形结构

    节点的分类

    1. 元素节点
    2. 属性节点
    3. 值节点
    4. 注释节点
    5. 根节点(document才是根节点)

    生成XML文档 xml的根节点为document节点

    如果book下只有一个节点元素可以用此操作取得结点元素的值

    /***********************************************************/

    <?php // 将数组格式变换为xml格式的文档输入  
    $array=array(array('name'=>'PHP','type'=>'脚本语言'),array('name'=>'XML','type'=>'标记语言'),array('name'=>'C#','type'=>'动态语言'));

    $doc=new DOMDocument('1.0','utf-8'); //设置版本号和字符编码
    $doc->formatOutput=true; //格式化输出 一般不用 这样降低效率

    $books=$doc->createElement('books'); //创建一个元素节点
    foreach($array as $value)
    {
    $book=$doc->createElement('book');//创建book节点 
    $name=$doc->createElement('name', $value['name']); //创建name节点,并赋值
    $book->appendChild($book); //在元素的最后面添加子元素
    $book->appendChild($name);
    $book->setAttribute('type',$value['type']);
    }
    $doc->appendChild($books);
    $doc->save('books.xml');
    echo '写入成功';

    /***********************************************************/

    if($_POST){//对已有的xml文档进行添加操作
    $doc=new DOMDocument();//不需要字符集和版本,因为已经存在
    $doc->preserveWhiteSpace=false;//去掉空格元素的影响
    $doc->formatOutput=true;//格式化输出
    $path='./books.xml';//将文件路径变为变量,以后好修改
    $doc->load($path);//对xml文档加载
    $book=$doc->createElement('book');//创建book节点
    $name=$doc->createElement('name',$_POST['name']);//创建name节点
    $price=$doc->createElement('price',$_POST['price']);//创建price节点
    $book->appendChild($name);//改变xml中包含的顺序
    $book->appendChild($price);
    $book->setAttribute('type', $_POST['type']);//设置book节点的属性
    $books=$doc->documentElement;//创建books节点
    $books->appendChild($book);//
    if($doc->save($path))//保存xml文档到硬盘
    {
    header('location:books_admin.php');
    }
    else
    {
    echo '添加失败';
    }
    }

    /***********************************************************/

    //删除节点

    <input type="button" value="删除" onclick="if(confirm('确定要删除吗'))location.href='books_del.php?index=<?php echo $i?>'" 

    //传入要删除的下标 通过get方式

    $doc=new DOMDocument();
    $doc->preserveWhiteSpace=false;
    $doc->formatOutput=true;
    $doc->load('books.xml');
    $index=$_GET['index'];
    $book=$doc->getElementsByTagName('book')->item($index);
    $book->parentNode->removeChild($book);
    $doc->save('books.xml');
    header('location:books_admin.php');

    /***********************************************************/

    修改

    <input type="button" value="修改" onclick="location.href='books_modify.php?index=<?php echo $i?>'"

    $index=$_GET['index'];
    if(!is_numeric($index))//确认是否存在
    die('非法操作');
    $doc=new DOMDocument();
    $doc->preserveWhiteSpace=false;
    $path='./books.xml';
    $doc->load($path);
    $oldbook=$doc->getElementsByTagName('book')->item($index);
    if($_POST){
    $newbook=$doc->createElement('book');
    $name=$doc->createElement('name',$_POST['name']);
    $price=$doc->createElement('price',$_POST['price']);
    $newbook->setAttribute('type', $_POST['type']);
    $newbook->appendChild($name);
    $newbook->appendChild($price);

    $root=$doc->documentElement->replaceChild($newbook, $oldbook); //替换节点
    $doc->save($path);
    header('location:books_admin.php');
    }
    ?>

    /***********************************************************/

    递归遍历xml

    值节点的名称是“#text”,根节点的名称是“#document”

    <?php

    //递归XML文档  适合xml通用操作,但是消耗资源

    function getChilds($node){

        echo "<ul>";

        if($node->nodeType==3){

            echo "<li>".$node->nodeValue."</li>";   //取出节点的值

        }

        else

        {

            echo "<li>".$node->nodeName."</li>";    //取出元素节点的名称

            if($node->attributes->length>0) //节点的属性的个数大于0,表示此节点有属性

            {

                foreach ($node->attributes as $attr){

                    echo "<li>".$attr->value."</li>";   //取出节点的值

                }

            }

            foreach($node->childNodes as $child){   //便利循环子元素

                getChilds($child);   //递归点

            }

        }

        echo "</ul>";

    }

    $doc=new DOMDocument();

    $doc->preserveWhiteSpace=false;  //不保护空格,就是导入XML的时候去掉空白字符

    $doc->load('books.xml');

    $root=$doc->documentElement;    //获得最顶层元素

    getChilds($root);

  • 相关阅读:
    zoj1028-Flip and Shift
    OSI七层模型基础知识及各层常见应用
    隐藏AutoCompleteTextView下拉框的滚动条
    VC++笔记七
    [置顶] 无名管道的C++封装
    张佩的Dump服务
    Oracle Autonomous Transactions(自治事务)
    Computational Geometry Template
    普通人和牛人之间的差距之举一反三能力
    关于选择
  • 原文地址:https://www.cnblogs.com/yd09023/p/5879014.html
Copyright © 2020-2023  润新知