zoukankan      html  css  js  c++  java
  • DOMElement 操作 xml 文档

    /*<?xml version="1.0" encoding="UTF-8" standalone="no"?>
     <!-- css的样式定义,不加点。如:name{color:red;} -->
    <?xml-stylesheet type="text/css" href="css.css"?>
    <!-- 引入dtd文档定义文件 (根元素:班级)<!DOCTYPE 班级 SYSTEM "class.dtd" /> -->
    <!-- <!DOCTYPE 班级[
    <!ELEMENT 班级 (学生+)>
    <!ELEMENT 学生 (名字,年龄,介绍)>
    <!ELEMENT 名字 (#PCDATA)>
    <!ELEMENT 年龄 (#PCDATA)>
    <!ELEMENT 介绍 (#PCDATA)>
    ] /> -->
    <班级>
    <学生 number="101">
    <名字>孙悟空</名字>
    <名字>孙行者</名字>
    <年龄>123</年龄>
    <介绍><![CDATA[&*$%特殊字串^&#$&]]></介绍>
    </学生>
    
    <学生 number="10&quot;2">
    <名字>白骨精</名字>
    <年龄>140</年龄>
    <介绍>介绍内容</介绍>
    </学生>
    </班级>
    */
    $xmldoc = new DOMDocument('1.0', 'UTF-8');
    $xmldoc->load('datas.xml');
    
    $itemsNodeList = $xmldoc->getElementsbyTagName('学生');
    $itemElement = $itemsNodeList->item(0);//得到第一个完整的学生信息节点
    $itemChildsNodeList = $itemElement->getElementsbyTagName('名字');//得到子节点“名字”,也许有多个名字
    $itemChildNode = $itemChildsNodeList->item(0);//得到第一个名字节点
    echo $itemChildNode->nodeValue;//输出节点值
    
    //封装成函数
    $nodeArr = array('名字', '年龄', '介绍'); 
    function getNodeVal($xmldoc, $itemsName, $nodeArr){
        $items = $xmldoc->getElementsByTagName($itemsName);
         for($i=0; $i < $items->length; $i++){
            $item = $items->item($i);
            foreach($nodeArr as $node){
                $data[$i][] = $item->getElementsByTagName($node)->item(0)->nodeValue;
            }
        } 
        return $data;
    }
    
    $data = getNodeVal($xmldoc, '学生', $nodeArr);
    print_r($data);
    //添加节点
    $xmldoc = new DOMDocument('1.0', 'UTF-8');
    $xmldoc->load('datas.xml');
    $items = $xmldoc->getElementsByTagName('班级')->item(0);//根节点
    $student =  $xmldoc->createElement('学生');//创建一个新的学生节点
    $stu_name = $xmldoc->createElement('名字','张三');
    $stu_age = $xmldoc->createElement('年龄','15');
    $stu_intro = $xmldoc->createElement('介绍','动手能力强且成绩稳定');
    $items->appendChild($student);
    $student->appendChild($stu_name);
    $student->appendChild($stu_age);
    $student->appendChild($stu_intro);
    $bytes = $xmldoc->save('datas.xml'); 
    echo ($bytes)? "写入了: $bytes 字节" : '保存失败';
    
    //删除节点
    $xmldoc = new DOMDocument('1.0', 'UTF-8');
    $xmldoc->load('datas.xml');
    $student = $xmldoc->getElementsByTagName('学生')->item(2);//直接找到要删除的节点
    $student->parentNode->removeChild($student);//父节点的删除方法
    $xmldoc->save('datas.xml');
    
    //修改节点值
    $student = $xmldoc->getElementsByTagName('学生')->item(2);
    $student->getElementsByTagName('年龄')->item(0)->nodeValue += 10;
    $student->setAttribute('id', '110');
    $xmldoc->save('datas.xml');
    
    //应用 Xpath 查找节点
    
    $xml = new DOMDocument('1.0', 'UTF-8');
    $xml->load('dat.xml');
    $xpath = new DOMXPath($xml);
    $nodeList = $xpath->query('/aaa/bbb/ddd/fff');
    echo $nodeList->item(0)->nodeValue;
    
    //SimpleXML 类操作 xml
    /*
    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    <book house="清华出版">
    <code>1001</code>
    <price>200元</price>
    <author>大明</author>
    <title>天龙八部</title>
    </book>
    <book house="北大出版">
    <code>1002</code>
    <price>321元</price>
    <author>张三</author>
    <title>笑傲江湖</title>
    </book>
    <book house="人 民出版">
    <code>1004</code>
    <price>182元</price>
    <author>李四</author>
    <title>读者</title>
    </book>
    </books>
    */
    $xml = simplexml_load_file('books.xml');
    $books = $xml->book;
    echo $books[1]->title . $books[1]['house'];//直接指向第二本书
    foreach($xml as $item){
        echo $item->title,' ',$item['house'],'<br/>';
    }
  • 相关阅读:
    js 时间戳格式化
    有关Safari 浏览器的文章
    前端图片旋转动画
    vue中textarea标签自适应高度
    pip 报错 Fatal error in launcher: Unable to create process using
    HTML列表多点击事件
    js获取浏览器版本信息
    SVG圆形进度条
    基于蚂蚁金服"AntDesignVue-Menu导航菜单"实现根据初始路由自动选中对应菜单解决刷新后菜单选择状态丢失问题(支持根路径菜单)
    java根据权重进行排序
  • 原文地址:https://www.cnblogs.com/zbseoag/p/2952148.html
Copyright © 2011-2022 走看看