17.4使用SimpleXML处理XML
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文档的输出结果
上一篇:17.3在PHP中处理XML
