设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 448|回复: 1

[教程] 使用php读取XML的几种方式 [复制链接]

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2836
精华
2
声望
12984 点
金币
2999 Mold
被赞许
28 次
注册时间
2006-4-28

Mod中国同盟社至高荣誉

发表于 2011-6-29 12:02:17 |显示全部楼层
xml源文件
  1. <?xml version="1.0 encoding="UTF-8"?>
  2. <humans>
  3. <zhangying>
  4. <name>张映</name>
  5. <***>男</***>
  6. <old>28</old>
  7. </zhangying>
  8. <tank>
  9. <name>tank</name>
  10. <***>男</***>
  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. $***s = $human->getElementsByTagName_r( "***" );
  10. $*** = $***s->item(0)->nodeValue;

  11. $olds = $human->getElementsByTagName_r( "old" );
  12. $old = $olds->item(0)->nodeValue;

  13. echo "$name - $*** - $old\n";

  14. }
  15. ?>
复制代码
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->***."-".$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( "/\<***\>(.*?)\<\/***\>/", $human, $*** ); //匹配出性别
  14. preg_match_all( "/\<old\>(.*?)\<\/old\>/", $human, $old ); //匹配出年龄
  15. }

  16. foreach($name[1] as $key=>$val){
  17. echo $val." - ".$***[$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. ?>
复制代码
三,小结

读取xml的方法很多,简单举几个。上面四种方法都是可以把标签中的数据读出来,<name>张映</name>.但是他们的测重点不同,前三种方法的读取xml的function的设计重点,是为了读取标签中的值,相当于jquery中的text()方法,而 xmlreader呢他就不太一样,他的重点不在读取标签中的值,而读取标签的属性,把要传送的数据,都放在属性中(不过我上面写的那个方法还是取标签中的值,因为xml文件已经给定了,我就不想在搞xml文件出来了)。举个例子解释一下,
<data name=’张映’ ***=’男’ old=’28′></data>
xmlreader的设计重点是为了读data里面的name *** old的值,而读取<data></data>的内容就比较麻烦了。他相当于jquery中attr(”);这个东西。
大家如果有好的办法读取xml,可以加上

使用道具 举报

头像被屏蔽

禁止发言

帖子
74
精华
0
声望
48 点
金币
-28 Mold
被赞许
-4 次
注册时间
2011-8-26
发表于 2011-8-28 16:49:21 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部