·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> php网站开发 >> php中的XML DOM(10)

php中的XML DOM(10)

作者:佚名      php网站开发编辑:admin      更新时间:2022-07-23
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>';    }?>