注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

PHP简单操作XML  

2010-03-31 16:45:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一 PHP生成XML(添加子节点,节点属性等)

header("Content-type:text/html;charset=utf-8;");
$xml_file_path = 'd:\xml.xml';
$xml_text = "<?xml version='1.0'?>\n"."<book></book>";//定义 与根元素
$xml????? = new SimpleXMLElement($xml_text);
$xml->addChild("title",'我的人生');
$xml->addChild('abstract','这本书是关于我的一生描述的');
$chapter1 = $xml->addChild('chapter_1','哇哇降生'); //添加节点
$chapter1->addAttribute('chapter_title','i\'m coming');//添加节点属性
$chapter1->addAttribute('content','ok,come on');
$chapter1_1 = $chapter1->addChild('chapter_1_1','两个人');//添chapter1的子节点
$chapter1_1->addAttribute('chapter_title','two people');
$chapter1_2 = $chapter1->addChild('chapter_1_2','我与弟弟');
$chapter1_2->addAttribute('chapter_title','my brother and i ');

$chapter2 = $xml->addChild('chapter_2','初入私孰');
$chapter2->addAttribute('chapter_title','studying');
$chapter3 = $xml->addChild('chapter_3','有感觉1');
$chapter3->addAttribute('chapter_title','i\'m feeling');
$chapter3->addChild('id',1);
$chapter3->addChild('name','fc');
$chapter3 = $xml->addChild('chapter_3','有感觉2');
$chapter3->addAttribute('chapter_title','i\'m feeling');
$chapter3->addChild('id',2);
$chapter3->addChild('name','fc');
$chapter3 = $xml->addChild('chapter_3','有感觉3');
$chapter3->addAttribute('chapter_title','i\'m feeling');
$chapter3->addChild('id',3);
$chapter3->addChild('name','fc');
$xml->asXML($xml_file_path); //保存XML文件,但中文会以html 实体字符形式存储,这个还没有找到方法解决

二PHP获得XML节点信息
?? 有如下XML文件.
<images>
?
<one displayNum="6" separation="5">
<image>images/foto1.jpg</image>
<description>站酷-素材分享与设计交流!</description>
</one>
?
<thumb>
<image>images/foto2.jpg</image>
<description>我的人生</description>
</thumb>
?
<three>
<image>images/foto3.jpg</image>
<description>“2008北京奥运”相关素材帖索引目录</description>
</three>
?
<thumb>
<image>images/foto4.jpg</image>
<description>相关素材帖索引目录</description>
</thumb>
?
<thumb>
<image>images/foto5.jpg</image>
<description>站酷社区</description>
</thumb>
?
<thumb>
<image>images/foto6.jpg</image>
<description>英雄岛--博客模板征集大赛</description>
</thumb>
?
<thumb>
<image>images/foto7.jpg</image>
<description>为大家在炎炎夏日送酷币</description>
</thumb>
</images>

php处理文件为:

<?php
/**
* 操作XML
* @author chengchuan
?* @internal 特别注意以下这句话:
* SimpleXML has made a rule of adding iterative properties to most methods.
* They cannot be viewed using var_dump() or anything else which can examine objects.
*
*/
class myXML{

static private $obj = NULL;
private $xml = NULL;
/*
* @param
* files source or string,$xml
*
*/???
static? public function initial_xml($xml){
if(file_exists($xml)){
$xml = simplexml_load_file($xml);
}elseif(is_string($xml)){
if(!class_exists('')){
$xml = new SimpleXMLElement($xml);
}else{
$xml = simplexml_load_string($xml);
}
}else{
die('Error:参数不正确');
}
if(!is_object($xml)){
die('Error:简析错误!!');???
}
if(!is_object(self::$obj)){
self::$obj = new myXML;
self::$obj->xml = $xml;
}

}
/**
* 循环得到相关节点的信息
* @param
*? $string,$node_name
* @return unknown_type
*/?
static public function get_xml_node_infor($node_name = ''){

$i =0;
foreach (self::$obj->xml as $person) {
$i++;
$j = $i.$person->getName();//取得节点名称
$array[$j] = array('image'=>$person->image,'description'=>$person->description);//取得指定节点的文本值

//取得指定节点的属性值的方式
foreach($person->attributes() as $a =>$v){
if(empty($v)){
break;
}
$array[$j]['attributes'][$a] = $v;??
}
}
//echo $array['1one']['attributes']['displayNum'];//这样来取得单个指定节点的属性值
return $array;
}

}

以上如果,我们?? var_dump($array);,那么将产生如下结果:
array(7) {
["1one"]=>
array(3) {
["image"]=>
object(SimpleXMLElement)#15 (1) {
[0]=>
string(16) "images/foto1.jpg"
}
["description"]=>
object(SimpleXMLElement)#16 (1) {
[0]=>
string(37) "站酷-素材分享与设计交流!"
}
["attributes"]=>
array(2) {
["displayNum"]=>
object(SimpleXMLElement)#19 (1) {
[0]=>
string(1) "6"
}
["separation"]=>
object(SimpleXMLElement)#20 (1) {
[0]=>
string(1) "5"
}
}
}
可以看displayNum里是一个对象,但取值时
仍以echo $array['1one']['attributes']['displayNum'];这种方式取值。
原因是“SimpleXML has made a rule of adding
iterative properties to most methods. They cannot be viewed using var_dump()
or anything else which can examine objects.”










  评论这张
 
阅读(83)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017