• php中的XML DOM(10)


    1.PHP DOM (1)

    Php中的DOM跟javascript不一样,属性不用另外增加一个节点

    2.主要类

         DOMDocument :文档类

         DOMNodeList :节点列表类

         DOMNode :节点类

         DOMElement :元素类

    3. DOMDocument

      3.1创建文档对象

         DOMDocument::__construct ([ string $version [, string $encoding ]] )

         [ string $version :版本号

         [, string $encoding ]]:字符集

      3.2、加载xml文件

         mixed DOMDocument::load ( string $filename)

         string $filename:要加载的xml文件名称

      3.3、获取节点

         DOMNodeList DOMDocument::getElementsByTagName ( string name )

         String name:要获取的节点名

    示例:Demo.php

    <?php
        header ( 'Content-Type:text/html;charset=gb2312' );
    // 利用php解析demo01.xml
    // 实例化dom对象
        $dom = new DOMDocument ();
    // 加载xml文件
        $dom->load ( 'demo01.xml' );
    // 通过dom对象获取person节点,注意:这里返回值是一个DOMNodeList类对象
        $persons = $dom->getElementsByTagName ( 'person' );
    // 共有几个person
        echo '共有' . $persons->length . '个人<br>';      //输出共有两个人
    // 选中索引为0的person,也就是第一个人
        $person = $persons->item ( 0 );
    // 在这个person下获取name节点,返回的仍然是一个DOMNodeList类对象
        $names = $person->getElementsByTagName ( 'name' );    
    // 输出姓名
    echo $names->item ( 0 )->nodeValue . '<br>';       //输出'张三'
    为什么要进行两次取的Nodelist呢?请参照上图,因为有两个节点

    demo.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
        <person id="s101">
            <name>zhangsan</name>
            <age>30</age>
        </person>
        <person>
            <name>wangwu</name>
            <age>18</age>
        </person>
    </persons>

    4. DOMNodeList类 (上面的person就是NodeList节点)

      1、Length

         当前节点列表中共有几个节点

      2、DOMElement DOMNodelist::item ( int $index )

         选中索引为index的节点

         int $index:索引

    5、 DOMNode类

         1、nodeValue 节点的值

    6、 关于属性的读取

       1、bool DOMElement::hasAttribute ( string $name )

          判断是否具有某个属性(只判断某个属性下有没有)

          String $name:属性名

       2、bool DOMNode::hasAttributes ( void )

          判断是否具有属性(只要有属性就返回true)

       3、string DOMElement::getAttribute ( string $name )

          获取指定属性的属性值

    String $name:属性名

    示例2.用连贯操作输出

    <?php
        $dom = new DOMDocument ( '1.0', 'utf-8' );
        $dom->load ( 'demo01.xml' );
    // 想得到第一个人的姓名
        echo $dom->getElementsByTagName ( 'person' )->item ( 0 )
        ->getElementsByTagName ( 'name' )->item ( 0 )->nodeValue;
    输出:张三

    Example3

    <?php
        header ( 'Content-Type:text/html;charset=gb2312' );
        $dom = new DOMDocument ( '1.0', 'utf-8' );
        $dom->load ( 'demo01.xml' );
        $person = $dom->getElementsByTagName ( 'person' )->item ( 0 );
    // 判断节点是否具有id属性
        if ($person->hasAttribute ( 'id' )) {
            echo '具有id属性';
        } else {
            echo '没有id属性';
        }
        echo '<br>';
    // 判断节点是否具有属性
        if ($person->hasAttributes ()) {
            echo '有属性';
        } else {
            echo '没有任何属性';
        }
        echo '<br>';
    // 得到第一个person的id属性值
        echo $person->getAttribute ( 'id' );

    之前的例子只能得到一条数据,现在我想得到所有人的完整信息,该如何实现?

    示例4:

    如果<person id="s101">这种有属性的,也要遍历出来呢?

    <?php
        header ( 'content-type:text/html;charset=gb2312' );
        $dom = new DOMDocument ( '1.0', 'utf-8' );
        $dom->load ( 'demo01.xml' );
    // 得到所有person节点
        $persons = $dom->getElementsByTagName ( 'person' );
    // 得到总人数
        $count = $persons->length;
        for($i = 0; $i < $count; $i ++) {
        // $person表示第i个人
            $person = $persons->item ( $i );
            echo '' . ($i + 1) . '个人的';
            if ($person->hasAttribute ( 'id' )) {
                echo '学号:' . $person->getAttribute ( 'id' );
            }
            echo '姓名:' . $person->getElementsByTagName ( 'name' )->item ( 0 )->nodeValue;
            echo '年龄:' . $person->getElementsByTagName ( 'age' )->item ( 0 )->nodeValue;
            echo '<br>';
        }
    ?>
  • 相关阅读:
    SQLite常用SQL语句
    delphi设计浮动窗口
    在Delphi中使用键盘勾子获取键盘输入(译--5月7日)
    Delphi制作软键盘
    Delphi格式化输出函数(1): Format
    《你不知道的 CSS》之等比例缩放的盒子
    请用心练完这16个webpack小例子
    JavaScript高级内容笔记:原型链、继承、执行上下文、作用域链、闭包
    表格组件神器:bootstrap table详细使用指南
    玩转JavaScript正则表达式
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/4356888.html
Copyright © 2020-2023  润新知