PHP
XML

PHPでXMLをパース

More than 3 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>