当前位置:首页 > PHP教程 > php高级应用 > 列表

php中操作xml文档程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-20 13:54:20 浏览: 评论:0 

下面我先是介绍一个朋友自己写的一个操作xml文档程序,然后再介绍了php中一个自带的解析xml文档的函数功能,有需要的朋友可参考,代码如下:

  1. /* 
  2. <?xml version="1.0" encoding="UTF-8"?> 
  3. <班级> 
  4. <学生 number="101"> 
  5. <名字>孙悟空</名字> 
  6. <名字>孙行者</名字> 
  7. <年龄>猴精猴精</年龄> 
  8. <介绍></介绍> 
  9. </学生> 
  10. <学生 number="102"> 
  11. <名字>白骨精</名字> 
  12. <年龄>140</年龄> 
  13. <介绍>幻化万千</介绍> 
  14. </学生> 
  15. <学生 number="103"> 
  16. <名字>猪八戒</名字> 
  17. <名字>猪无能</名字> 
  18. <年龄>200</年龄> 
  19. <介绍>能吃会睡</介绍> 
  20. </学生> 
  21. </班级> 
  22. */ 
  23.  
  24. class xmlDom{ 
  25.     public $version
  26.     public $encoding
  27.     private $xml
  28.     private $items
  29.     private $seachNode = ''
  30.     private $seachItem = ''
  31.     private $seachValue = ''
  32.     public $writeBytes = 0; 
  33.  
  34.     function __construct($xmlFile =''$version ='1.0'$encoding = 'UTF-8'){ 
  35.         $this->version = $version
  36.         $this->encoding = $encoding
  37.         $this->xml = new DOMDocument($version$encoding); 
  38.         if($xmlFile)$this->xml->load($xmlFile); 
  39.     } 
  40.     function getRootEle($rootTag){ 
  41.         $this->xmlRoot = $this->xml->getElementsByTagName($rootTag)->item(0); 
  42.     } 
  43.     function getSeachItem($itemsTag$seachNode$seachValue){ 
  44.         $this->items = $this->xml->getElementsByTagName($itemsTag); 
  45.         $this->items->length; 
  46.         for($i=0; $i<$this->items->length; $i++){ 
  47.             $item = $this->items->item($i);//元素 
  48.             $node = $item->getElementsByTagName($seachNode);//节点 
  49.             for($j = 0; $j$node->length; $j++){ 
  50.                 $subNode = $node->item($j); 
  51.                 if($seachValue == $subNode->nodeValue){ 
  52.                     $this->seachNode = $subNode
  53.                     $this->seachItem = $item
  54.                     $this->seachValue = $subNode->nodeValue; 
  55.                     break(2); 
  56.                 } 
  57.             } 
  58.         } 
  59.         return ($this->seachNode) ? true : false; 
  60.     } 
  61.      
  62.     function update($nodeValue$nodeTag = '',$append = false, $index = 0){ 
  63.         if($append){ 
  64.             if($nodeTag
  65.                 $this->seachItem->getElementsByTagName($nodeTag)->item($index)->nodeValue += $nodeValue
  66.             else 
  67.                 $this->seachNode->nodeValue += $nodeValue
  68.         }else
  69.             if($nodeTag
  70.                 $this->seachItem->getElementsByTagName($nodeTag)->item($index)->nodeValue = $nodeValue
  71.             else 
  72.                 $this->seachNode->nodeValue = $nodeValue
  73.         } 
  74.     } 
  75.      
  76.     function save($filename){ 
  77.         $this->writeBytes = $this->xml->save($filename); 
  78.         return ($this->writeBytes) ? true : false; 
  79.     } 
  80. //开源代码phpfensi.com 
  81. $test = new xmlDom('student.xml'); 
  82. $test->getSeachItem('学生','年龄','103');//找到 年龄=103 的猪八戒 
  83. $test->update('小猪猪''名字', false, 1); //把猪八戒的第二个名字改成:小猪猪 
  84. $test->save('new.xml'); //保存成新文件 

上面是使用了dom来操作,下面我们利用php中的SimpleXML来操作xml,也算是很标准的一个操作xml文档的类了.

simplexml_load_file(string filename)

这里的 filename变量是用于存储 XML数据文件的文件名及其所在路径,以下代码使用 simplexml_load_file函数来创建了一个 SimpleXML对象,代码如下:

  1. <?php  
  2. $xml = simplexml_load_file(’example.xml’); //创建 SimpleXML对象  
  3. print_r($xml);   //输出 XML  
  4. ?> 

其中,example.xml存储的数据与上面的$data完全相同,运行结果也与上面完全相同.

上面两种方法实现了同样的功能,其区别就在于 XML的数据源不同,如果 XML的数据源在 PHP脚本文件中,则需要使用 simplexml_load_string来进行创建,如果 XML的数据源在一个单独的 XML文件中,则需要使用 simplexml_load_file来进行创建.

读取 XML数据中的标签

与操作数组类型的变量类似,读取 XML也可以通过类似的方法来完成,例如,如果需要读取上面 XML数据中每一个“ depart”标签下的“name”属性,可以通过使用 foreach函数来完成,如以下代码所示.

  1. <?php $xml = simplexml_load_file(’example.xml’); foreach($xml->depart as $a)  
  2. {  
  3. echo “$a->name <BR>”;  
  4. }  
  5. ?>  
  6. //运行结果如下所示。 
  7. //production support 
  8. //testing center 

读取 XML文件,循环读取 XML数据中的每一个 depart标签,输出其中的 name属性,也可以使用方括号“ []”来直接读取 XML数据中指定的标签,以下代码输出了上面 XML数据中的第一个“depart”标签的“name”属性,代码如下:

  1. <?php  
  2. $xml = simplexml_load_file(’example.xml’); //读取 XML文件  
  3. echo $xml->depart->name[0]; //输出节点  
  4. ?>   
  5. //运行结果如下所示。 
  6. //production support 

对于一个标签下的所有子标签,SimpleXML组件提供了 children方法进行读取,例如,对于上面的 XML数据中的“ depart”标签,其下包括两个子标签:“ name”和“employees”,以下代码实现了对第一个“depart”标签下的子标签的读取.

Tags: php操作xml xml文档程序

分享到: