【万能的数据传输格式XML入门教程】五、PHP DOM模型详解

1. 与面、串、点相关的类

DOMDocument:文档类(面)
DOMNodeList:列表类(串)
DOMNode:节点类(点)
DOMElement:元素类(点)

2. 开辟内存空间形成面

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

主要功能:创建一个文档类对象,形成“面”

参数 说明
$version XML版本,默认为1.0
$encoding XML编码格式,默认为UTF-8
// 1、开辟内存空间,形成“面”
$dom = new DOMDocument('1.0','UTF-8');
var_dump($dom);

运行结果:

3. 载入XML文档到内存,形成DOM树

public mixed DOMDocument::load ( string $filename [, int $options = 0 ] )

主要功能:载入XML到内存,形成DOM树

参数 说明
$filename 要载入的文档名称
// 2、载入XML文档到内存,形成DOM树
$dom->load('data.xml');

4. PHP DOM模型完成查询功能

PHP DOM模型查询四步走:

第一步:开辟内存空间,形成“面”
第二步:载入XML文档到内存,形成DOM树
第三步:获取同级的兄弟节点,形成“串”
第四步:根据相关条件,获取要查询的“点”

public DOMNodeList DOMDocument::getElementsByTagName ( string $name )

主要功能:根据元素的名称获取同级兄弟节点,形成“串”

主要功能:根据相关条件获取要查询的点

参数 说明
$length 获取节点的数量
item(int $index) 根据元素的索引来获取要查询的节点,默认从0开始

主要功能:通过nodeValue获取要查询的点的值
解析:item选项获取的点是DOMElement类对象,又由于DOMElement继承了DOMNode,所以在开发中可以通过item选项获取的点并结合DOMNode下的nodeValue属性获取其值。

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、开辟内存空间,形成“面”
$dom = new DOMDocument('1.0', 'UTF-8');
// var_dump($dom);
// 2、载入XML文档到内存,形成DOM树
$dom->load('data.xml');
// 3、获取同级兄弟节点,形成“串”
$titles = $dom->getElementsByTagName('title');
echo "当前共有{$titles->length}个title节点";
echo '<hr />';
// 4、根据查询条件获取要查询的点
echo $dom->getElementsByTagName('title')->item(0)->nodeValue;

data.xml:

<?xml version="1.0" encoding="UTF-8"?>
<library>
    <book id="b001">
        <title>西游记</title>
        <price>168.00</price>
        <author>吴承恩</author>
        <publish>中国文学出版社</publish>
    </book>
    <book id="b002">
        <title>红楼梦</title>
        <price>99.80</price>
        <author>曹雪芹</author>
        <publish>红楼研究会</publish>
    </book>
    <book>
        <title>三国演义</title>
        <price>198.00</price>
        <author>罗贯中</author>
        <publish>三国演义研究学会</publish>
    </book>
</library>

运行结果:

5. PHP DOM模型遍历输出数据

// 设置响应头信息
header('Content-type:text/html; charset=utf-8');
// 1、开辟内存空间,形成“面”
$dom = new DOMDocument('1.0', 'utf-8');
// 2、载入xml数据到内存,形成DOM树结构
$dom->load('data.xml');
// 3、根据元素名称获取同级兄弟节点
$length = $dom->getElementsByTagName('book')->length;
// 4、通过for循环遍历输出所有的图书信息
for($i=0;$i<$length;$i++) {
    // 5、通过查询条件获取要查询到的点,并通过nodeValue输出其值
    echo $dom->getElementsByTagName('title')->item($i)->nodeValue.'<br />';
    echo $dom->getElementsByTagName('price')->item($i)->nodeValue.'<br />';
    echo $dom->getElementsByTagName('author')->item($i)->nodeValue.'<br />';
    echo $dom->getElementsByTagName('publish')->item($i)->nodeValue.'<hr />';
}

运行结果:

posted @ 2016-09-07 16:10  chenjiacheng  阅读(297)  评论(0编辑  收藏  举报