PHP头条
热点:

php中的XML DOM(10),xmldom


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:

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

 

www.phpzy.comtrue/php/33746.htmlTechArticlephp中的XML DOM(10),xmldom 1.PHP DOM (1) Php中的DOM跟javascript不一样,属性不用另外增加一个节点 2. 主要类 DOMDocument :文档类 DOMNodeList :节点列表类 DOMNode :节点类 DOMElement :元素类 3. D...

相关文章

    暂无相关文章

PHP之友评论

今天推荐