17.4 使用SimpleXML处理XML
在PHP5中读取、操作、编写XML时,如果处理的XML文档比较简单或比较小,通常会使用SimpleXML,必要的时候再加上DOM。SimpleXML和DOM是PHP中两种用来处理XML的常用的API,它们易于使用而且功能完善,而且SimpleXML和DOM可以相互操作。
17.4.1 SimpleXML简介
SimpleXML正像其名字所蕴含的含义一样,使用起来非常简单。如果XML文档不是很复杂、嵌套不太深、又没有混合内容的话,使用SimpleXML要比使用DOM简单得多。SimpleXMLAPI需要在PHP5的环境下使用,它包括和DOM的互操作性,以便编写XML文件和其他的一些支持。SimpleXML最适合简单的、类似记录的数据,比如从同一个应用程序其他部分传递来的XML文档或字符串。
SimpleXML将XML文档转换成一个对象,下面是SimpleXML转换XML文档各个组成部分的情况分析。
·XML元素被转换成SimpleXMLElement对象的一个单一属性。如果同一层上有多个元素,那么这些元素会被存放在数组中。
·XML元素的属性可以使用关联数组来访问,数组的索引就是XML元素的属性名。XML元素属性的值就是关联数组的元素值。
·XML元素的字符数据将被转换成字符串。
17.4.2 载入XML文件的函数
SimpleXML使用函数simplexml_load_file()载入一个XML文件,并将该XML文档解释为一个XML对象。该函数的原型如下。
object simplexml_load_file (string $filename [, string $class_name [, int $options]])
函数simplexml_load_file()的第1个参数是要载入的XML文件名;第2个参数是可选的,如果指定该参数,函数simplexml_load_file()返回这个指定类的对象;第3个参数$option也是可选的,这个参数在实际应用中使用的情况很少,这里不再赘述。代码17-3演示了使用该函数载入一个XML文档。
代码17-3 使用SimpleXML的simplexml_load_file()载入XML文档17-3.php
01 <?php 02 if(file_exists('17-1.xml')) // 判断文件是否存在 03 { 04 $xml = simplexml_load_file('17-1.xml'); // 加载文件 05 var_dump($xml); 06 } 07 else 08 { 09 exit(' 载入文件test.xml 失败'); 10 } 11 ?>
【代码解析】代码第04行使用函数simplexml_load_file()载入当前目录下的17-1.xml,转换后的XML文档成为一个对象并赋值于变量$xml。读者可以通过浏览器查看这段代码的执行结果,通过页面的源代码可以更清晰地看到代码17-3所载入XML文档的结构,源代码如下。
object(SimpleXMLElement)#1 (1) { ["book"]=> array(5) { [0]=> object(SimpleXMLElement)#2 (4) { ["title"]=> string(13) "Learning PHP5" ["author"]=> string(5) "David" ["publisher"]=> string(17) "White Water Press" ["price"]=> string(5) "29.90" } [1]=> object(SimpleXMLElement)#3 (4) { ["title"]=> string(12) "Learning XML" ["author"]=> string(7) "Jeffson" ["publisher"]=> string(17) "White Water Press" ["price"]=> string(5) "50.79" } ...( 此处省略一部分) } }
17.4.3 载入XML字符串的函数
Simple除了提供从文件载入XML的函数simplexml_load_file()之外,还提供了一个载入XML字符串的函数——simplexml_load_string(),该函数的语法如下。
object simplexml_load_string (string $data [, string $class_name [, int $options]])
函数simplexml_load_string()的第1个参数是XML字符串,第2个参数和第3个参数的意义同函数simplexml_load_file(),这里不再赘述。代码17-4演示了该函数的用法。
代码17-4 使用SimpleXML的simplexml_load_string()载入XML字符串17-4.php
01 <?php 02 $xml_str = "<?xml version='1.0' encoding='UTF-8'?>"; 03 $xml_str .= "<EMAILDOCUMENT>"; 04 $xml_str .= "<TITLE> 最近在学什么</TITLE>"; 05 $xml_str .= "<FROM> 小强</FROM>"; 06 $xml_str .= "<TO> 大强</TO>"; 07 $xml_str .= "<BODY>"; 08 $xml_str .= " 我最近在学PHP ,你呢?"; 09 $xml_str .= "</BODY>"; 10 $xml_str .= "</EMAILDOCUMENT>"; 11 12 $xml = simplexml_load_string($xml_str); // 载入XML 字符串 13 var_dump($xml); 14 ?>
【代码解析】这段代码首先定义了一个含有XML的字符串,然后通过函数simplexml_load_string()将这个字符串载入,转换成对象赋给变量$xml。读者可以通过浏览器查看该程序输出页面的源代码,可以看到这个函数所载入的XML字符串,源代码如下。
object(SimpleXMLElement)#1 (4) { ["TITLE"]=> string(18) " 最近在学什么" ["FROM"]=> string(6) " 小强" ["TO"]=> string(6) " 大强" ["BODY"]=> string(30) " 我最近在学PHP ,你呢?" }
注意 这段程序所载入的XML字符串中含有中文字符,需要将代码按UTF-8编码保存,程序才能正常执行。
17.4.4 使用SimpleXML的实例
这节将通过一较完整的实例,从整体上来了解SimpleXML的用法。本实例所载入的XML文档仍是17-1.xml,代码17-5是这个实例的完整代码,执行结果如图17-8所示。
代码17-5 使用SimpleXML处理XML文档17-5.php
01 <?php 02 $xml = simplexml_load_file("17-1.xml"); // 载入指定的XML 文档 03 04 echo "==== " . $xml->getName() . "====<br/>"; // 获取当前元素的名称 05 06 foreach($xml->children() as $child) 07 { 08 echo "--- ".$child->getName() . " --- <br/>"; 09 foreach($child->children() as $ch) 10 { 11 echo $ch->getName() . ": " . $ch . "<br/>"; 12 } 13 echo "<br/>"; 14 } 15 ?>
【代码解析】代码首先使用函数simplexml_load_file()载入XML文档,并将其转换为对象赋给变量$xml。代码第04行通过该对象的getName()方法获取当前元素的名称,此时获取的是根元素的名称,并将其输出到页面。接着在代码第06行通过循环获取根元素下的每个子元素,这里使用了方法children()来获取一个元素的子元素。在循环内部继续使用该方法获取子元素,然后输出这些元素的名称。
图17-8 使用SimpleXML处理XML文档的输出结果
共有条评论 网友评论