1. 云栖社区>
  2. PHP教程>
  3. 正文

php中的XML DOM(10)

作者:用户 来源:互联网 时间:2017-12-01 18:38:32

php中的XML DOM(10) - 摘要: 本文讲的是php中的XML DOM(10), 1.PHP DOM (1) Php中的DOM跟javascript不一样,属性不用另外增加一个节点 2.主要类      DOMDocument :文档类      DOMNodeList :节点列表类      DOMNode :节点

1.PHP DOM (1)

php中的XML DOM(10)

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:

php中的XML DOM(10)

如果<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>';    }?>

 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。