栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP解析XML的几种方法(附代码)

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP解析XML的几种方法(附代码)

不管是桌面软件开发,还是WEB应用,XML无处不在!

然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成,解析等。假期有空,于是将PHP中的几种XML解析方法总结如下:

以解析Google API 接口提供的天气情况为例,我们取今天的天气及气温。

API地址:http://www.google.com/ig/api?weather=shenzhen

【XML文件内容】

  
  
      
   
       
       
       
       
       
       
       
   
   
       
       
       
       
       
       
   
      

【使用Domdocument解析】

getElementsByTagName("current_conditions");
$element = $elements->item(0);
$condition = get_google_xml_data($element, "condition");
$temp_c = get_google_xml_data($element, "temp_c");
echo '天气:', $condition, '
'; echo '温度:', $temp_c, '
'; function get_utf8_string($content) { // 将一些字符转化成utf8格式 $encoding = mb_detect_encoding($content, array('ASCII','UTF-8','GB2312','GBK','BIG5')); return mb_convert_encoding($content, 'utf-8', $encoding); } function get_google_xml_data($element, $tagname) { $tags = $element->getElementsByTagName($tagname); // 取得所有的$tagname $tag = $tags->item(0); // 获取第一个以$tagname命名的标签 if ($tag->hasAttributes()) { // 获取data属性 $attribute = $tag->getAttribute("data"); return $attribute; }else { return false; } } ?>

这只是一个简单的示例,仅包括了loadXML, item, getAttribute,getElementsByTagName等方法,还有一些有用的方法,这个依据你的实际需要。

【XMLReader】

当我们要用php解读xml的内容时,有很多物件提供函式,让我们不用一个一个字元去解析,而只要根据标签和属性名称,就能取出文件中的属性与内容了,相较之下方便许多。其中XMLReader循序地浏览过xml档案的节点,可以想像成游标走过整份文件的节点,并抓取需要的内容。

open($url);
 
$condition = '';
$temp_c = '';
while ($xml->read()) {
//      echo $xml->name, "==>", $xml->depth, "
"; if (!empty($condition) && !empty($temp_c)) { break; } if ($xml->name == 'condition' && empty($condition)) { // 取第一个condition $condition = $xml->getAttribute('data'); } if ($xml->name == 'temp_c' && empty($temp_c)) { // 取第一个temp_c $temp_c = $xml->getAttribute('data'); } $xml->read(); } $xml->close(); echo '天气:', $condition, '
'; echo '温度:', $temp_c, '
';

我们只是需要取第一个condition和第一个temp_c,于是遍历所有的节点,将遇到的第一个condition和第一个temp_c写入变量,最后输出。

【DOMXPath】

这种方法需要使用DOMdocument对象创建整个文档的结构,

load($url);
 
$xpath = new DOMXPath($dom);
$element = $xpath->query("/xml_api_reply/weather/current_conditions")->item(0);
$condition = get_google_xml_data($element, "condition");
$temp_c = get_google_xml_data($element, "temp_c");
echo '天气:', $condition, '
'; echo '温度:', $temp_c, '
'; function get_google_xml_data($element, $tagname) { $tags = $element->getElementsByTagName($tagname); // 取得所有的$tagname $tag = $tags->item(0); // 获取第一个以$tagname命名的标签 if ($tag->hasAttributes()) { // 获取data属性 $attribute = $tag->getAttribute("data"); return $attribute; }else { return false; } } ?>

【xml_parse_into_struct】

说明:int xml_parse_into_struct ( resource parser, string data, array &values [, array &index] )

该函数将 XML 文件解析到两个对应的数组中,index 参数含有指向 values 数组中对应值的指针。最后两个数组参数可由指针传递给函数。

注意: xml_parse_into_struct() 失败返回 0,成功返回 1。这和 FALSE 与 TRUE 不同,使用例如 === 的运算符时要注意。

';
echo '温度:', $vals[$index['TEMP_C'][0]]['attributes']['DATA'], '
';

【Simplexml】

此方法在PHP5中可用

这个在google的官方文档中有相关的例子,如下:

// Charset: utf-8

 
// 城市,用城市拼音
$city = empty($_GET['city']) ? 'shenzhen' : $_GET['city'];
$content = file_get_contents("http://www.google.com/ig/api?weather=$city&hl=zh-cn");
$content || die("No such city's data");
$content = mb_convert_encoding($content, 'UTF-8', 'GBK');
$xml = simplexml_load_string($content);
 
$date = $xml->weather->forecast_information->forecast_date->attributes();
$html = $date. "
rn"; $current = $xml->weather->current_conditions; $condition = $current->condition->attributes(); $temp_c = $current->temp_c->attributes(); $humidity = $current->humidity->attributes(); $icon = $current->icon->attributes(); $wind = $current->wind_condition->attributes(); $condition && $condition = $xml->weather->forecast_conditions->condition->attributes(); $icon && $icon = $xml->weather->forecast_conditions->icon->attributes(); $html.= "当前: {$condition}, {$temp_c}°C, {$humidity} {$wind}
rn"; foreach($xml->weather->forecast_conditions as $forecast) { $low = $forecast->low->attributes(); $high = $forecast->high->attributes(); $icon = $forecast->icon->attributes(); $condition = $forecast->condition->attributes(); $day_of_week = $forecast->day_of_week->attributes(); $html.= "{$day_of_week} : {$high} / {$low} °C, {$condition}
rn"; } header('Content-type: text/html; Charset: utf-8'); print $html; ?>

相关推荐:PHP教程

以上就是PHP解析XML的几种方法(附代码)的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/262904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号