simplexml是php5新增的处理xml的对象,下面简要举例说明对象的各个属性和方法,已经简单处理xml文档的过程
simplexml_load_file(str file); 将一个xml文档载入一个simplexml对象中,此方法返回一个句柄
simplexml_load_string(str string);将一段xml文档载入一个simplexml对象中,此方法返回一个句柄
simplexml_import_dom(data) 该函数把一个dom节点转为simplexml对象,其中data为实用的DOM节点
$simplexml->addAttribute(name,value) 给simplexml对象元素添加一个属性,注意,是simplexml对象元素,不是simplexml对象句柄。
$simplexml->addChlid(name,value)给指定的XML节点添加一个子节点
$simplexml->asXML() 从SimpleXMLElement对象中以一个字符串的形式返回XML文档,可以当作保存xml文档来来用
$simplexml->attributes() 返回由simplexml对象元素节点的属性组成的数组,
<?
$str='<tpl><tag name="cx,html" tt="dd" /><tg hh="123456" /></tpl>';
$xml = simplexml_load_string($str);
if(!$xml) die('xml解析有错');
$xml = (array)($xml->tag->attributes());
print_r($xml);
?>
运行上面代码会打印出以个数组,Array ( [@attributes] => Array ( [name] => cx,html [tt] => ddd ) )
可见,$simplexml->attributes()得到的是一个xml元素节点的所有属性,不过被包含在一个[@attributes]数组中,所以要通过$xml = $xml['@attributes']来获得
$simplexml->Children() 返回simplexml对象元素节点的孩子组成的数组
$simplexml->__construct() 创建一个新的XML文档
$simplexml->getDocNamespaces() 该函数返回$simplexml对象定义的命名空间
$simplexml->getName() 返回$simplexml对象元素的名称,即标签名
$simplexml->getNamespaces() 返回$simplexml对象使用的命名空间
$simplexml->registerXpathNamespace() 该函数为下一次XPATH查询创建命名空间语境
$simplexml->xpath() 使用xpath的语法来解析一个Simplexml对象
实例代码1
<LeapsoulXML>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开发 </name>
<website>http://www.leapsoul.cn </website>
<description>分享PHP网站开发与建设的乐趣,教你如何建立网站 </description>
<bloger>David </bloger>
<date>2009-05-13 </date>
<qq>QQ:154130270 </qq>
</LeapsoulInfo>
<LeapsoulInfo>
<name>Leapsoul-PHP网站开发 </name>
<website>http://www.leapsoul.cn </website>
<description>分享PHP网站开发与建设的乐趣,教你如何建立网站 </description>
<bloger>David </bloger>
<date>2009-05-13 </date>
<qq>QQ:154130270 </qq>
</LeapsoulInfo>
</LeapsoulXML>
实例代码2
2、
3、 print_r ( $info ) ;
4、
5、$name = $info -> LeapsoulInfo [ 0 ] -> name ;
6、
7、 echo $name ;
8、
9、foreach ( $info -> LeapsoulInfo as $LeapsoulInfo )
10、{
11、 echo $LeapsoulInfo -> name . "<br />" ;
12、 echo $LeapsoulInfo -> website . "<br />" ;
13、 echo $LeapsoulInfo -> description . "<br />" ;
14、 echo $LeapsoulInfo -> bloger . "<br />" ;
15、 echo $LeapsoulInfo -> date . "<br />" ;
16、 echo $LeapsoulInfo -> qq . "<br />" ;
17、}
reach ( $info -> xpath ( '//name' ) as $value ) {
echo $value . '<br />' ;
}
foreach ( $info -> LeapsoulInfo [ 0 ] -> children ( ) as $value ) {
echo $value -> getName ( ) ;
echo $value . '<br />' ;
}
$info -> LeapsoulInfo [ 0 ] -> addChild ( 'msn' , 'MSN:davidfaithman@hotmail.com' ) ;
$info -> asXML ( 'leapsoulcn.xml' ) ;
代码注释
第1行:simplexml_load_file:读取一个xml文档作为操作对象,可以读取本地或者远程xml文档;simplexml_load_string:读取一个xml字符串作为操作的对象
第3行:如果不清楚如何获取某个节点的信息,可用print_r函数打印输出查看具体的结构,simplexml解析返回的对象具有数组结构。
第5~8行:以对象方式读取某个XML文档节点信息,读取方式:句柄->节点元素名->子节点,如果相同的节点元素有多个,则以数组(array)方式读取
注:由于simplexml解析返回的信息是UTF8格式的,如果网站使用的是GBK的,则需要转码,你可以使用iconv函数或者其他的utf8与gbk转换函数进行操作,如:$name = iconv(’utf-8′,’gbk’,$name);
第9~17行:以遍历的形式,读取所有元素下的子节点信息
第19~21行:simplexml的xpath函数是用来查询XML数据的,比如这里查询的是所有name节点的值
第23~26行:children函数是用来找寻某个特定节点下所有子节点的值。getName函数用来获得每个子节点的元素名称
第28~29行:addChild函数用来在某个特定节点下增加一个子节点;asXML函数对已做过改动的XML文档进行保存
![](http://ctc.qzs.qq.com/ac/b.gif)