zoukankan      html  css  js  c++  java
  • DOM方式操作XML

    好几天没有写文章了,最近一直在考驾照,还差一个科目四了,所以最近文章更新比较少。趁着放假赶紧更新几篇。今天分享一篇使用DOM 方式操作XML。


    1、生成XML:

    <?php
    /**
     * DOM创建XML文件
     * @author webbc
     */
    
    /**
     * 创建示例
     * <?xml version="1.0" encoding="utf-8"?>
     * <appstore>
     *    <goods goods_id="g001">
     *      <name>天龙八部</name>
     *      <intro><![DATA[这本书真好]]></intro>
     *    </goods>
     * </appstore>
     */
    
    //1、创建dom文档对象
    $dom = new DOMDocument('1.0','utf-8');
    //2、创建天龙八部文本对象
    $tl = $dom->createTextNode('天龙八部');
    //3、创建name节点对象
    $name = $dom->createElement('name');
    //4、把天龙文本对象添加到name节点对象中
    $name->appendChild($tl);
    //5、创建CDATA节点对象
    $cdata = $dom->createCDATASection('这本书真好');
    //6、创建intro节点对象
    $intro = $dom->createElement('intro');
    //7、把cdata对象添加到intro节点中
    $intro->appendChild($cdata);
    // 8、创建goods节点对象
    $goods = $dom->createElement('goods');
    //9、把name和Intro两个节点对象分别添加到goods节点对象中
    $goods->appendChild($name);
    $goods->appendChild($intro);
    //10、创建goods_id属性节点对象
    $goods_id = $dom->createAttribute('goods_id');
    $goods_id->value = 'g001';
    //11、把属性节点对象添加到goods节点对象中
    $goods->appendChild($goods_id);
    //12、创建appstore节点对象
    $appstore = $dom->createElement('appstore');
    //13、把goods对象添加到appstore对象中
    $appstore->appendChild($goods);
    //14、把appstore对象最后添加到文档对象中
    $dom->appendChild($appstore);
    
    //输出到浏览器
    header("Content-type:text/xml;charset:utf-8");
    echo $dom->saveXML();
    
    //保存成文件
    //$dom->save('./05.xml');
    ?>

    结果:
    这里写图片描述

    2、解析XML

    这里写图片描述

    题:找出“天龙八部”和“倚天屠龙剑”文本内容

    <meta charset="utf-8"/>
    <?php
    /**
     * dom解析xml
     * @author webbc
     */
    //1、创建dom文档对象
    $dom = new DOMDocument('1.0','utf-8');
    //2、将xml内容加载到该对象中
    $dom->load('./04.xml');
    //3、找出title节点,得到节点列表对象
    $titleList = $dom->getElementsByTagName("title");
    //4、然后根据节点列表对象的item方法来获取节点对象
    $title0 = $titleList->item(0);
    //5、找出该title节点的子节点,得到节点列表对象
    $childList = $title0->childNodes;
    //6、然后根据节点列表对象的item方法来获取节点对象,这里获取的是文本节点对象
    echo $childList->item(0)->wholeText;//找出“天龙八部”
    echo "<br/>";
    echo $dom->getElementsByTagName("title")->item(1)->childNodes->item(0)->wholeText;//找出“倚天屠龙剑”
    echo "<br/>";
    print_r($dom->getElementsByTagName("title")->item(1)->nodeValue);//找出“倚天屠龙剑”
    ?>

    结果:
    这里写图片描述

    3、XML节点的删与改

    <?php
    /**
     * XML节点的删与改
     * @author webbc
     */
    //删除“天龙八部”节点,只能父节点删除自身的子节点
    $dom = new DomDocument('1.0','utf-8');
    $dom->load('./04.xml');
    $bookList = $dom->getElementsByTagName('book');
    $bookList->item(0)->parentNode->removeChild($bookList->item(0));
    header('Content-type:text/xml;charset=utf-8');
    // echo $dom->saveXML();
    //修改节点,只能采取替换节点的方式来修改节点,只能父节点来替换自身的子节点,把“倚天屠龙记”文本节点替换成“鹿鼎记”文本节点
    $title = $dom->getElementsByTagName('title')->item(0);
    $tl = $dom->createTextNode('鹿鼎记');
    $title->replaceChild($tl,$title->firstChild);
    header('Content-type:text/xml;charset=utf-8');
    echo $dom->saveXML();
    ?>

    这里写图片描述

  • 相关阅读:
    poj 1984 Navigation Nightmare(带权并查集+小小的技巧)
    zoj 3261 Connections in Galaxy War(并查集逆向加边)
    poj 1733 Parity game(带权并查集)
    poj 1456 Supermarket(贪心+优先队列)
    hdu 3038 How Many Answers Are Wrong(并查集的思想利用)
    poj 1182 食物链(种类并查集 ‘初心者’)
    hdu 1182 A Bug's Life(简单种类并查集)
    hdu 4725 The Shortest Path in Nya Graph(建图+优先队列dijstra)
    CodeForces 779D. String Game(二分答案)
    poj 3169 Layout(差分约束+spfa)
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407071.html
Copyright © 2011-2022 走看看