当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

17.7使用PHP的DOM库处理XML文档

9/17/2020 9:26:54 PM 人评论

17.7使用PHP的DOM库处理XML文档

17.7 使用PHP的DOM库处理XML文档

DOM是Document Object Model的缩写。它是在浏览器中使用的、用JavaScript操作的W3C DOM规范。使用DOM可以很容易地将XML文档分析成一个树型结构。PHP中的DOM扩展内容比较庞大,限于篇幅本书不可能一一介绍,本节从宏观和总体角度介绍PHP的DOM扩展,同时挑选一些重要并且常用的函数向读者加以介绍。下面就为读者介绍如何通过DOM在PHP中处理XML文档。

(1)在PHP中使用DOM,首先需要创建一个DOM的实例,即DOMDocument,如下代码所示。


$dom=new DOMDocument;


(2)建立好DOM的实例之后,就可以载入XML到该实例中。有两个方法可以实现载入XML,一是从一个字符串载入,使用函数loadXML(),代码如下所示。


$dom->loadXML('<string>books</string>');


另一种是从文件载入,使用函数load(),代码如下所示。


$dom->load('17-1.xml');


(3)使用DOM对象的documentElement属性可以访问XML文档的根元素。代码17-6演示了使用这个属性获取17-1.xml文档的根元素。

代码17-6 使用DOM对象的documentElement属性获取XML文档根元素17-6.php


01 <?php

02 $dom=new DOMDocument;

03

04 $dom->load('17-1.xml');

05 $root=$dom->documentElement;//获取XML文档根元素

06 ?>


【代码解析】这段代码载入17-1.xml,使用DOM对象的documentElement获取该XML的根元素。代码第5行执行后,变量$root里包含了指向该XML的根元素。

(4)在PHP中可以使用DOM对象的方法saveXML()输出XML字符串,而使用方法save()可以将XML保存为一个XML文件,代码17-7是使用这两个方法的一个完整示例代码。

代码17-7 使用DOM对象的saveXML()和save()方法17-7.php


01 <?php

02 $xml_str="<?xml version='1.0'?>";//以下开始定义XML字符串

03 $xml_str.="<books>";

04 $xml_str.="<book>";

05 $xml_str.="<title>Harry Potter</title>";

06 $xml_str.="<author>J.K.Rowling</author>";

07 $xml_str.="<publisher>Warner Bros.</publisher>";

08 $xml_str.="<price>39.0</price>";

09 $xml_str.="</book>";

10 $xml_str.="</books>";

11

12 $dom=new DOMDocument;

13 $dom->loadXML($xml_str);//载入定义的XML字符串

14

15 echo$dom->saveXML();//将XML输出到一个字符串

16 $dom->save("test.xml");

17 ?>


【代码解析】这段代码通过DOMDcoument对象的loadXML方法,载入事先定义的XML字符串,如代码第13行所示。然后通过saveXML()方法将这段XML输出到一个字符串,然后通过save()方法将这段XML保存为test.xml文件。执行17-7.php后,可以在页面上看到如图17-9所示的结果,同时在当前目录下应该看到一个由17-7.php生成的XML文档文件test.xml。

图 17-9 使用saveXML()和save()

(5)在PHP中使用DOM的getElementsByTagName()方法,可以返回一个元素的字符数据,该函数接受一个元素名称作为参数。代码17-8演示了该函数的用法。

代码17-8 使用DOM对象的getElementsByTagName()方法17-8.php


01 <?php

02 $doc=new DOMDocument();

03 $doc->load("17-1.xml");//载入指定的XML文档

04

05 $books=$doc->getElementsByTagName("book");//返回book元素的数据

06 foreach($books as$book)//遍历book元素

07 {

08 $authors=$book->getElementsByTagName("author");

09 $author=$authors->item(0)->nodeValue;

10

11 $publishers=$book->getElementsByTagName("publisher");

12 $publisher=$publishers->item(0)->nodeValue;

13

14 $titles=$book->getElementsByTagName("title");

15 $title=$titles->item(0)->nodeValue;

16

17 $prices=$book->getElementsByTagName("price");

18 $price=$prices->item(0)->nodeValue;

19

20 echo"$title-$author-$publisher-$price";

21 echo"<br/>";

22 echo"<br/>";

23 }

24 ?>


这段代码的执行结果如图17-10所示。

图 17-10 使用DOM对象的getElementsByTagName()方法

【代码解析】这段代码首先使用load()载入XML文档17-1.xml。然后,使用getElementsByName()方法得到指定名称下的所有元素的列表,如代码第5行所示。接着在循环中同样使用get Elements-ByName()方法获得book元素下所有节点的对象,最后获得该节点的nodeValue,nodeValue是节点中的字符数据。

上一篇:17.6.4使用SimpleXML的实例

下一篇:17.8小结

相关教程

共有条评论 网友评论

验证码: 看不清楚?