首页后端开发PHPPHP解析XML的几种方法(附代码)

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

时间2024-02-02 07:51:03发布访客分类PHP浏览716
导读:收集整理的这篇文章主要介绍了PHP解析XML的几种方法(附代码),觉得挺不错的,现在分享给大家,也给大家做个参考。不管是桌面软件开发,还是WEB应用,XML无处不在!然而在平时的工作中,仅仅是使用一些已经封装好的类对XML对于处理,包括生成...
收集整理的这篇文章主要介绍了PHP解析XML的几种方法(附代码),觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

【XML文件内容】

?xml version="1.0"?>
      xml_api_reply version="1">
          weather module_id="0" tab_id="0" mobile_row="0" mobile_zipPEd="1" row="0" section="0" >
              forecast_information>
                  cITy data="Shenzhen, Guangdong"/>
                  postal_code data="shenzhen"/>
                  latitude_e6 data=""/>
                  longitude_e6 data=""/>
                  forecast_date data="2009-10-05"/>
                  current_date_time data="2009-10-04 05:02:00 +0000"/>
                  unit_System data="US"/>
              /forecast_information>
              current_conditions>
                  condition data="Sunny"/>
                  temp_f data="88"/>
                  temp_c data="31"/>
                  humidity data="Humidity: 49%"/>
                  icon data="/ig/images/weather/sunny.gif"/>
                  wind_condition data="Wind:  mph"/>
              /current_conditions>
          /weather>
      /xml_api_reply>
    

【使用DomDocument解析】

?PHPheader("Content-type:text/html;
     Charset=utf-8");
    $url = "http://www.google.com/ig/api?weather=shenzhen";
     //  加载XML内容$content = file_get_contents($url);
    $content = get_utf8_string($content);
    $dom = DOMDocument::loadXML($content);
    /*此处也可使用如下所示的代码,$dom = new DOMDocument();
    $dom->
    load($url);
     */ $elements = $dom->
    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, 'br />
    ';
    echo '温度:', $temp_c, 'br />
    ';
 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档案的节点,可以想像成游标走过整份文件的节点,并抓取需要的内容。

?PHPheader("Content-type:text/html;
     Charset=utf-8");
    $url = "http://www.google.com/ig/api?weather=shenzhen";
     //  加载XML内容$xml = new XMLReader();
    $xml->
    open($url);
     $condition = '';
    $temp_c = '';
    while ($xml->
read()) {
    //      echo $xml->
    name, "==>
    ", $xml->
    depth, "br>
    ";
          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, 'br />
    ';
    echo '温度:', $temp_c, 'br />
    ';
    

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

【DOMxpath】

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

?PHPheader("Content-type:text/html;
     Charset=utf-8");
    $url = "http://www.google.com/ig/api?weather=shenzhen";
     //  加载XML内容$dom = new DOMDocument();
    $dom->
    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, 'br />
    ';
    echo '温度:', $temp_c, 'br />
    ';
 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 不同,使用例如 === 的运算符时要注意。

?PHPheader("Content-type:text/html;
     Charset=utf-8");
    $url = "http://www.google.com/ig/api?weather=shenzhen";
     //  加载XML内容$content = file_get_contents($url);
    $p = xml_parser_create();
    xml_parse_into_struct($p, $content, $vals, $index);
    xml_parser_free($p);
     echo '天气:', $vals[$index['CONDITION'][0]]['attributes']['DATA'], 'br />
    ';
    echo '温度:', $vals[$index['TEMP_C'][0]]['attributes']['DATA'], 'br />
    ';
    

【Simplexml】

此方法在PHP5中可用

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

// Charset: utf-8/**  * 用php Simplexml 调用google天气预报api,和g官方的例子不一样  * google 官方php domxml 获取google天气预报的例子  * http://www.google.com/tools/toolbar/buttons/intl/zh-CN/apis/howto_guide.html  *  * @copyright Copyright (c) 2008 cmpan(at)QQ.com>
      * @license New BSD License  * @version 2008-11-9  */ // 城市,用城市拼音$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. "br>
    \r\n";
     $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,img src='http://www.google.com/ig{
$icon}
    '/>
 {
$humidity}
 {
$wind}
     br />
    \r\n";
     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}
 img src='http://www.google.com/ig{
$icon}
    ' />
    br />
    \r\n";
}
     header('Content-type: text/html;
     Charset: utf-8');
    PRint $html;
    ?>
    

相关推荐:PHP教程

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP解析XML的几种方法(附代码)
本文地址: https://pptw.com/jishu/596563.html
了解php操作redis的几种常用方法 php抽象类和接口之间有什么区别?

游客 回复需填写必要信息