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
<?xml version="1.0" encoding="gbk"?>
<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
1、$info = simplexml_load_file
('leapsoulcn.xml');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文档进行保存