Help us understand the problem. What is going on with this article?

PHPでXMLをパース

More than 5 years have passed since last update.

はじめに

最近PythonやPHPでXMLなどをパースすることについてちょっと勉強しているので、記録。今回はPHP版。

利用している関数

今回は『一手間必要。PHPでのSimpleXML関数のパース処理
』というサイトを参考にさせていただいて、simplexml_load_file()という関数を利用してXMLからデータを取得しました。

サンプルコード

今回はアイドルグループ「乃木坂46」さんが公開しているブログに関するXML(http://blog.nogizaka46.com/atom.xml)をパースして、タイトル、ブログへのリンク、公開日、更新日、ブログ内容を取得します。

get_xmldata.php
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>XMLをパース|FantmSite</title>
    </head>
    <body>
        <?php
        $data = array();
        $nogiblog_xml = simplexml_load_file('http://blog.nogizaka46.com/atom.xml');
        foreach($nogiblog_xml->entry as $item){
            $x = array();
            $x['title'] = (string)$item->title;
            $x['link'] = (string)$item->link;
            $x['published'] = (string)$item->published;
            $x['updated'] = (string)$item->updated;
            $data[] = $x;
        }
        ?>
        <pre><?php var_dump($data);?></pre>     
    </body>
</html>

出力結果の例としては以下のような感じになります。

array(165) {
  [0]=>
  array(5) {
    ["title"]=>
    string(37) "アリスにデビルにメ イド。"
    ["link"]=>
    string(0) ""
    ["published"]=>
    string(20) "2014-10-20T15:00:02Z"
    ["updated"]=>
    string(20) "2014-10-20T16:01:08Z"
  }
  [1]=>
  array(5) {
    ["title"]=>
    string(26) "ひめたん-OoO-その490"
    ["link"]=>
    string(0) ""
    ["published"]=>
    string(20) "2014-10-20T14:45:02Z"
    ["updated"]=>
    string(20) "2014-10-20T16:01:00Z"
  }
}

実際の出力結果について

実際に出力した結果は『XMLをパース|FantmSite』で(2014.10.21現在)公開しました。(公開を終了しました)

上記のURL先のコードは以下のようになっています。
ブログの内容を$x['content'] = (string)$item->content;と追加することで取得しました。

xmltest.php
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>XMLをパース|FantmSite</title>
    </head>
    <body>
        <h3><a href="http://www.nogizaka46.com/">乃木坂46</a>さんのブログのXMLをパースした結果</h3>
        <hr>
        <?php
        $data = array();
        $nogiblog_xml = simplexml_load_file('http://blog.nogizaka46.com/atom.xml');
        foreach($nogiblog_xml->entry as $item){
            $x = array();
            $x['title'] = (string)$item->title;
            $x['link'] = (string)$item->link;
            $x['published'] = (string)$item->published;
            $x['updated'] = (string)$item->updated;
            $x['content'] = (string)$item->content;
            $data[] = $x;
        }
        ?>
        <pre><?php var_dump($data);?></pre>     
    </body>
</html>
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away