• dom技术解析xml (php)


    1.xml实例

    test.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE 班级 SYSTEM "test.dtd">
    <!--<!DOCTYPE 班级 [
    <!Element 班级 (学生+)>
    <!Element 学生 (name,age,sex)>
    <!Element name (#PCDATA)>
    <!Element age (#PCDATA)>
    <!Element sex (#PCDATA)>
    ]>-->
    <班级>
    <学生>
    //在CDATA中可以嵌入任何内容,包括图片。
    //在默认情况下,只要符合书写语法,浏览器不会去检验是否符合逻辑,我们需要自己写代码测试。
    <!--<name>悟空&quot;&apos;&lt;&gt;</name>
    <![CDATA[<age>500><' ""</age>]]>-->
    <name>悟空</name>
    <age>500</age>
    <sex>男</sex>
    //人不可能有面积属性,不符合逻辑。
    <面积>500</面积>
    </学生>
    <学生>
    <name>白骨精</name>
    <age>1000</age>
    <sex>女</sex>
    </学生>
    </班级>

    test.dtd

    <!Element 班级 (学生+)>
    <!Element 学生 (name,age,sex)>
    <!Element name (#PCDATA)>
    <!Element age (#PCDATA)>
    <!Element sex (#PCDATA)>

    checkDtd.html

    <html>
    <head>
    <title>测试dtd</title>
    <meta http-equiv="content-type"content="text/html;charset=utf-8"/>
    <script type="text/javascript">
    //创建一个xml解析器
    var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
    //开启校验功能
    xmldoc.validateOnParse=true;
    //指定对哪一个xml文件进行校验
    xmldoc.load("test.xml");
    //如有错误,则输出
    document.write("错误信息"+xmldoc.parseError.reason+"<br/>");
    document.write("错误信息="+xmldoc.parseError.line+"<br/>");
    </script>
    </head>
    </html>

    此检测dtd的方法只适用于IE浏览器,是IE浏览器特有的属性,其他浏览器不支持。

    2.php技术操作xml文件

      *php dom

      *php结合xpath操作xml

      *SimpleXml

    //phpdom解析xml

    test.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE 班级 SYSTEM "test.dtd">
    <!--<!DOCTYPE 班级 [
    <!Element 班级 (学生+)>
    <!Element 学生 (name,age,sex)>
    <!Element name (#PCDATA)>
    <!Element age (#PCDATA)>
    <!Element sex (#PCDATA)>
    ]>-->
    <班级>
    <学生>
    <name>0</name>
    <age>25</age>
    <sex>男</sex>
    </学生>
    <学生>
    <name>0</name>
    <age>25</age>
    <sex>男</sex>
    </学生>
    <学生>
    <name>0</name>
    <age>25</age>
    <sex>男</sex>
    </学生>
    </班级>

    phpdom.php

    <html>
    <head>
    <meta http-equiv="content-type"content="text/html charset=utf-8"/>
    </head>
    <?php
    //获取Domdocument对象。
    $xmldoc=new DOMDocument();
    //指定要处理的xml文件,加载xml文件
    $xmldoc->load("test.xml");
    //希望获取每一个学生的名字
    $students=$xmldoc->getElementsByTagName("学生");
    echo $students->length;
    for($i=0;$i<$students->length;$i++){
            $node=$students->item($i);
            echo getNodeValue($node,"name")."<br/>";
            echo getNodeValue($node,"age")."<br/>";
            echo getNodeValue($node,"sex")."<br/>";
    }
    //$node=$students->item(0);
    /*$list=$node->getElementsByTagName("name");
    $list1=$list->item(0)->nodeValue;
    echo $list1;*/
    //echo getNodeValue($node,"age");
    function getNodeValue(&$node,$tagName){
        return $node->getElementsByTagName($tagName)->item(0)->nodeValue;
    }

    ?>
    </html>

    //增加节点的操作代码

    addNode.php

    <html>
    <head>
    <meta http-equiv="content-type"content="text/html charset=utf-8"/>
    </head>
    <?php
    //获取Domdocument对象。
    $xmldoc=new DOMDocument();
    //指定要处理的xml文件,加载xml文件
    $xmldoc->load("test.xml");
    //希望获取每一个学生的名字
    $root=$xmldoc->getElementsByTagName("班级")->item(0);
    //创建一个学生节点
    $name=$xmldoc->createElement("学生");
    //创建一个名字节点
    $name1=$xmldoc->createElement("name");
    //给名字节点赋值
    $name1->nodeValue="鑫鑫";
    //把名字节点挂载到学生节点之下
    $name->appendChild($name1);
    //创建年龄节点
    $name2=$xmldoc->createElement("age");
    //给年龄节点赋值
    $name2->nodeValue="25";
    //将年龄节点挂载到学生节点之下
    $name->appendChild($name2);
    //创建性别节点
    $name3=$xmldoc->createElement("sex");
    //给性别节点赋值
    $name3->nodeValue="男";
    //将性别节点挂载到学生节点之下
    $name->appendChild($name3);
    //最后将学生节点挂载到根节点班级之下
    $root->appendChild($name);
    //回写入xml文件
    $xmldoc->save("test.xml");
    ?>
    </html>

    //删除节点的操作

    <html>
    <head>
    <meta http-equiv="content-type"content="text/html charset=utf-8"/>
    </head>
    <?php
    //获取Domdocument对象。
    $xmldoc=new DOMDocument();
    $xmldoc->load("test.xml");
    //获取根节点
    $root=$xmldoc->getElementsByTagName("班级")->item(0);
    //要删除第3个学生
    //获取学生节点
    $students=$xmldoc->getElementsByTagName("学生");
    //获取第三个学生
    $stu1=$students->item(0);
    //删除第三个学生
    //$root->removeChild($stu1);
    $stu1->parentNode->removeChild($stu1);
    $xmldoc->save("test.xml");
    echo "删除成功";
    ?>
    </html>

    //更新节点内容的操作

    <html>
    <head>
    <meta http-equiv="content-type"content="text/html charset=utf-8"/>
    </head>
    <?php
    //获取Domdocument对象。
    $xmldoc=new DOMDocument();
    $xmldoc->load("test.xml");
    //获取学生节点
    $student=$xmldoc->getElementsByTagName("学生")->item(0);
    //获取第三个学生
    $stu_name=$student->getElementsByTagName("name")->item(0);
    //更新文本的值
    $stu_name->nodeValue+="八戒";
    $xmldoc->save("test.xml");
    echo "更新成功";
    ?>
    </html>

    与Java解析xml相比之下,利用PHP解析xml要简单一些,更容易让人理解。

    今日暂时分享于此。明日继续。

    革命尚未成功,同志仍需努力!

  • 相关阅读:
    【模拟+排序】花生采摘 luogu-1086
    【模拟】玩具谜题 luogu-1563
    【并查集模板】并查集模板 luogu-3367
    【字符串+排序】宇宙总统 luogu-1781
    【队列+模拟】机器翻译 luogu-1540
    【Lucas组合数定理+中国剩余定理】Mysterious For-HDU 4373
    【Lucas组合数定理】组合-FZU 2020
    【贪心+排序】营养膳食
    「JSOI2013」贪心的导游
    「JSOI2013」哈利波特和死亡圣器
  • 原文地址:https://www.cnblogs.com/aasu/p/9119625.html
Copyright © 2020-2023  润新知