php读取XML的方法

php读取XML的方法

xml源文件

 <?xml version="1.0 encoding="UTF-8"?>
 <humans>
     <zhangying>
         <name>张映</name>
         <sex></sex>
         <old>28</old>
     </zhangying>
     <tank>
         <name>tank</name>
         <sex></sex>
         <old>28</old>
     </tank>
 </humans>

1)DOMDocument读取xml

 <?php 
     $doc = new DOMDocument(); 
     $doc->load('person.xml'); //读取xml文件 
     $humans = $doc->getElementsByTagName( "humans" ); //取得humans标签的对象数组 
     foreach( $humans as $human ) 
     { 
         $names = $human->getElementsByTagName( "name" ); //取得name的标签的对象数组 
         $name = $names->item(0)->nodeValue; //取得node中的值,如<name> </name> 
         $sexs = $human->getElementsByTagName( "sex" ); 
         $sex = $sexs->item(0)->nodeValue; 
         $olds = $human->getElementsByTagName( "old" ); 
         $old = $olds->item(0)->nodeValue; 
         echo "$name - $sex - $old\n"; 
     } 
 ?> 

2)simplexml读取xml

 <?php 
     $xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中 

     foreach($xml_array as $tmp){ 
         echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>"; 
     } 

 ?> 

3)用php正则表达式来读取数据

 <?php 

     $xml = ""; 
     $f = fopen('person.xml', 'r'); 
     while( $data = fread( $f, 4096 ) ) { 
         $xml .= $data; 
     } 
     fclose( $f ); 

     // 上面读取数据 
     preg_match_all( "/\<humans\>(.*?)\<\/humans\>/s", $xml, $humans ); //匹配最外层标签里面的内容 

     foreach( $humans[1] as $k=>$human ) 
     { 
         preg_match_all( "/\<name\>(.*?)\<\/name\>/", $human, $name ); //匹配出名字 
         preg_match_all( "/\<sex\>(.*?)\<\/sex\>/", $human, $sex ); //匹配出性别 
         preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄 
     } 

     foreach($name[1] as $key=>$val){ 
         echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ; 
     } 

 ?> 

4)xmlreader来读取xml数据

<?php 
     $reader = new XMLReader(); 
     $reader->open('person.xml'); //读取xml数据 
     $i=1; 
     while ($reader->read()) { //是否读取 
         if ($reader->nodeType == XMLReader::TEXT) { //判断node类型 
             if($i%3) { 
                 echo $reader->value; //取得node的值 
             } else { 
                 echo $reader->value."<br>" ; 
             } 
             $i++; 
         } 
     } 
 ?> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值