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/>';
    }
  • 相关阅读:
    [LeetCode] 374. Guess Number Higher or Lower
    [LeetCode] 35. Search Insert Position
    [LeetCode] 205. Isomorphic Strings
    [LeetCode] 87. Scramble String
    [LeetCode] 274. H-Index
    [LeetCode] 507. Perfect Number
    [LeetCode] 88. Merge Sorted Array
    [LeetCode] 283. Move Zeroes
    [LeetCode] 287. Find the Duplicate Number
    [LeetCode] 204. Count Primes
  • 原文地址:https://www.cnblogs.com/zbseoag/p/2952148.html
Copyright © 2011-2022 走看看