Heim  >  Artikel  >  Backend-Entwicklung  >  Mehrere Methoden zum Parsen von XML mit PHP (mit Code)

Mehrere Methoden zum Parsen von XML mit PHP (mit Code)

青灯夜游
青灯夜游nach vorne
2020-07-16 16:23:063340Durchsuche

Mehrere Methoden zum Parsen von XML mit PHP (mit Code)

Ob Desktop-Softwareentwicklung oder WEB-Anwendung, XML ist überall!

In der täglichen Arbeit verwenden wir jedoch nur einige gekapselte Klassen zur Verarbeitung von XML, einschließlich Generierung, Analyse usw. Da ich in den Ferien etwas Freizeit habe, habe ich mehrere XML-Parsing-Methoden in PHP wie folgt zusammengefasst:

Am Beispiel der Analyse der Wetterbedingungen, die von der Google-API-Schnittstelle bereitgestellt werden, nehmen wir das heutige Wetter und die Temperatur.

API-Adresse: http://www.google.com/ig/api?weather=shenzhen

[XML-Dateiinhalt]

<?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-Parsing verwenden]

<?PHP
header("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;
    }
}
?>

Dies ist nur ein einfaches Beispiel, das nur LoadXML, Item, GetAttribute, GetElementsByTagName und andere Methoden enthält. Dies hängt auch von Ihren tatsächlichen Methoden ab Situation.

[XMLReader]

Wenn wir PHP verwenden, um den Inhalt von XML zu interpretieren, gibt es viele Objekte, die Funktionen bereitstellen, sodass wir sie nicht analysieren müssen Sie können die Attribute und Inhalte in der Datei einfach anhand des Tag- und Attributnamens abrufen, was viel praktischer ist. Der XMLReader durchsucht nacheinander die Knoten der XML-Datei, was man sich wie einen Cursor vorstellen kann, der durch die Knoten der gesamten Datei läuft, und greift auf den erforderlichen Inhalt zu.

<?PHP
header("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 />';

Wir müssen nur die erste Bedingung und den ersten temp_c erhalten, also durchlaufen wir alle Knoten, schreiben die erste Bedingung und den ersten angetroffenen temp_c in Variablen und geben sie schließlich aus.

[DOMXPath]

Diese Methode erfordert die Verwendung des DOMDocument-Objekts, um die Struktur des gesamten Dokuments zu erstellen,

<?PHP
header("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]

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

Diese Funktion analysiert die XML-Datei in zwei entsprechende Arrays. Der Indexparameter enthält Punkte auf Werte. Zeiger auf den entsprechenden Wert im Array. Die letzten beiden Array-Parameter können per Zeiger an die Funktion übergeben werden.

Hinweis: xml_parse_into_struct() gibt 0 bei Fehler und 1 bei Erfolg zurück. Dies unterscheidet sich von FALSE und TRUE. Seien Sie daher vorsichtig, wenn Sie Operatoren wie === verwenden.

<?PHP
header("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]

Diese Methode ist in PHP5 verfügbar

Hierzu gibt es relevante Beispiele in der offiziellen Dokumentation von Google, wie folgt:

// 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=&#39;http://www.google.com/ig{$icon}&#39;/> {$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=&#39;http://www.google.com/ig{$icon}&#39; /><br />\r\n";
}
 
header('Content-type: text/html; Charset: utf-8');
print $html;
?>

Verwandte Empfehlungen: PHP-Tutorial

Das obige ist der detaillierte Inhalt vonMehrere Methoden zum Parsen von XML mit PHP (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen