解析XML数据,必看

xml源文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <humans>
  3.     <zhangying>
  4.         <name>张映</name>
  5.         <sex></sex>
  6.         <old>28</old>
  7.     </zhangying>
  8.     <tank>
  9.         <name>tank</name>
  10.         <sex></sex>
  11.         <old>28</old>
  12.     </tank>
  13. </humans>
复制代码

1)DOMDocument读取xml

  1. <?php
  2. $doc = new DOMDocument();
  3. $doc->load('person.xml'); //读取xml文件
  4. $humans = $doc->getElementsByTagName_r( "humans" ); //取得humans标签的对象数组
  5. foreach( $humans as $human )
  6. {
  7.     $names = $human->getElementsByTagName_r( "name" ); //取得name的标签的对象数组
  8.     $name = $names->item(0)->nodeValue; //取得node中的值,如<name> </name>
  9.     $sexs = $human->getElementsByTagName_r( "sex" );
  10.     $sex = $sexs->item(0)->nodeValue;
  11.     $olds = $human->getElementsByTagName_r( "old" );
  12.     $old = $olds->item(0)->nodeValue;
  13.     echo "$name - $sex - $oldn";
  14. }
  15. ?>
<?php
  //创建一个DOMDocument对象
  $doc = new DOMDocument();
  //加载XML文件
  $doc ->load( "books.xml" );
  //获取所有的book标签
  $bookDom = $doc ->getElementsByTagName( "book" );
  foreach ( $bookDom as $book ){
   $title = $book ->getElementsByTagName( "title" )->item(0)->nodeValue;
   $author = $book ->getElementsByTagName( "author" )->item(0)->nodeValue;
   $year = $book ->getElementsByTagName( "year" )->item(0)->nodeValue;
   $price = $book ->getElementsByTagName( "price" )->item(0)->nodeValue;
   echo "title:" . $title . "<br>" ;
   echo "author:" . $author . "<br>" ;
   echo "year:" . $year . "<br>" ;
   echo "price:" . $price . "<br>" ;
   echo "***********************************<br>" ;
  }
?>

 

单条就不必循环了:

$dom->load($url1);
$status = $dom->getElementsByTagName( "productStatusName" ); //取得productStatusName的标签的对象数组
$status = $status->item(0)->nodeValue;

 

 

复制代码

2)simplexml读取xml

  1. <?php
  2. $xml_array=simplexml_load_file('person.xml'); //将XML中的数据,读取到数组对象中
  3.     foreach($xml_array as $tmp){
  4.     echo $tmp->name."-".$tmp->sex."-".$tmp->old."<br>";
  5. }
  6. ?>
复制代码

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

  1. <?php
  2.     $xml = "";
  3.     $f = fopen('person.xml', 'r');
  4.     while( $data = fread( $f, 4096 ) ) {
  5.         $xml .= $data;
  6.     }
  7.     fclose( $f );
  8.     // 上面读取数据
  9.     preg_match_all( "/<humans>(.*?)</humans>/s", $xml, $humans ); //匹配最外层标签里面的内容
  10.     foreach( $humans[1] as $k=>$human )
  11.     {
  12.         preg_match_all( "/<name>(.*?)</name>/", $human, $name ); //匹配出名字
  13.         preg_match_all( "/<sex>(.*?)</sex>/", $human, $sex ); //匹配出性别
  14.         preg_match_all( "/<old>(.*?)</old>/", $human, $old ); //匹配出年龄
  15.     }
  16.     foreach($name[1] as $key=>$val){
  17.         echo $val." - ".$sex[$key][1]." - ".$old[$key][1]."<br>" ;
  18.     }
  19. ?>
复制代码

4)xmlreader来读取xml数据

  1. <?php
  2.     $reader = new XMLReader();
  3.     $reader->open('person.xml'); //读取xml数据
  4.     $i=1;
  5.     while ($reader->read()) { //是否读取
  6.         if ($reader->nodeType == XMLReader::TEXT) { //判断node类型
  7.             if($i%3){
  8.                 echo $reader->value; //取得node的值
  9.             }else{
  10.                 echo $reader->value."<br>" ;
  11.             }
  12.             $i++;
  13.         }
  14.     }
  15. ?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值