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 />'; }
运行结果: