PHP读取XML数据的四种方法以及将XML转成JSON格式
<? //PHP读取XML数据的四种方法 //------------------- 方法一 [DOMDOCUMENT] --------------------// $doc = new DOMDOCUMENT(); $doc -> load('1.xml'); $peoples = $doc -> getElementsByTagName('peoples'); foreach($peoples as $people){ $names = $people -> getElementsByTagName('name'); $talls = $people -> getElementsByTagName('tall'); //echo iconv('utf-8','gbk',$names->item(1)->nodeValue);//梁朝伟 <解决中文为乱码> } //--------------------- 方法二 [simplexml] (简单)-----------------// $xml = simplexml_load_file('1.xml'); foreach($xml as $x){ //echo iconv('utf-8','gbk',$x->name),' ';//Faya 梁朝伟 } //---------------------- 方法三 [正则表达式] (正则匹配效率要差点) ------------------// $xml = ""; $f = fopen('1.xml', 'r'); while($data = fread($f, 1024)) { $xml .= $data; } fclose($f); preg_match_all("/\<peoples\>(.*?)\<\/peoples\>/s", $xml,$peoples); foreach($peoples[1] as $k=>$people) { preg_match_all("/\<name\>(.*?)\<\/name\>/", $people, $name); preg_match_all("/\<tall\>(.*?)\<\/tall\>/", $people, $tall); } foreach($name[0] as $key=>$val){ //echo $val,' '; //Faya 梁朝伟 } //---------------------- 方法四 [XMLReader] (功能强大,主要针对属性)--------------------------// $url = "http://www.google.com/ig/api?weather=guangzhou"; $xmlreader = new XMLReader(); $xmlreader -> open($url); while($xmlreader->read()) { if ($xmlreader->name == 'day_of_week') { echo e2c($xmlreader->getAttribute('data')),':'; } if ($xmlreader->name == 'low') { $centigrade = round(($xmlreader->getAttribute('data') - 32) / 1.8 , 1); echo '最低气温:'.$centigrade.', '; } if ($xmlreader->name == 'high') { $centigrade = round(($xmlreader->getAttribute('data') - 32) / 1.8 , 1); echo '最高气温:'.$centigrade.'<br>'; } } $xmlreader->close(); function e2c($str){ $str = strtolower($str); $en = array('mon','tue','wed','thu','fri','sat','sun'); $cn = array('星期一','星期二','星期三','星期四','星期五','星期六','星期日'); return str_replace($en,$cn,$str); } ?> <?xml version="1.0" encoding="gbk"?> <peoples> <people> <name>ChyiChin</name> <sex>男</sex> </people> <people> <name>王菲</name> <sex>女</sex> </people> </peoples> <? //对字段类型提供优化的建议SELECT * FROM pre_forum_post PROCEDURE ANALYSE(1)\G echo long2ip('-888'); //XML转成JSON格式 function xml_to_json($source) { if(is_file($source)){ $xml_array=simplexml_load_file($source); }else{ $xml_array=simplexml_load_string($source); } $json = json_encode($xml_array); return $json; } echo '<br>'; echo xml_to_json('test.xml'); echo '<br>'; $str = <<<EOF <peoples> <people><name>王菲</name></people> <people><name>陈奕迅</name></people> </peoples> EOF; $str = iconv("gbk", "utf-8", $str); echo xml_to_json($str); ?>