文章教程

17.4使用SimpleXML处理XML

9/17/2020 9:31:19 PM 人评论 次浏览

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文档的输出结果

教程类别