Board logo

标题: php5的simplexml对象 [打印本页]

作者: xiexie    时间: 2011-3-28 23:47     标题: php5的simplexml对象

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文档进行保存

 

 






欢迎光临 PHP开发笔记 (http://phpvi.com/) Powered by Discuz! 6.1.0