【第十回】PHPでシステム開発を実践!基本的な構文⑦:XMLについて

はじめに

前回の記事では、ファイルの書き込みや読み込みについて取り上げましたが、今回の記事でもファイルの取り扱いについてさらに紹介していこうと思います。

XMLについて

ここからはXMLについて取り上げます。

XMLとは

XMLとは、HTMLと同じマークアップ言語の1つです。
書き方も一見HTMLと似たような記述に見えますが、使われているタグやその役割は全然違います。
HTMLはサイトの見た目を作るための言語で、人に情報を伝えるためのものですがマシンにはその文章の意味を理解することが出来ません。
一方XMLはマシン側で認識させることができ、データの受け渡しができるようになります。
そのためデータ管理においては力を大きく発揮し、HTMLとXMLを連携させることやPHPでXMLを扱うことが出来たりと用途は多岐にわたります。

参考:XMLとは?IT初心者にもわかりやすい基礎知識とHTMLとの違い
参考:『HTML』と『XML』の違いって何?

PHPとXML

こちらの記事ではPHPをメインに取り上げていますので、PHPでXMLを扱う方法について触れていきたいと思います。
まずはXMLを用意する必要があります。
もし無い場合はネットで「xml サンプル」などと検索しますとヒットしますので、そちらをお使いください。
XML形式でPHPのファイルと同じ階層に保存します。
今回は「rss.xml」という名前で保存しています。
VSCxmlファイル保存場所

XMLファイルを読み込む

まずはxmlファイルに入力されている文を指定し、ブラウザ上に表示させることをPHPで行ってみたいと思います。
ここで使う関数がsimplexml_load_file()です。
基本的な形式は以下のようになります。
——————
simplexml_load_file(‘対象ファイル’);
——————

試しに以下のプログラムを入力してみます。
——————
<?php
$xmlTree = simplexml_load_file(‘rss.xml’);
echo $xmlTree->channel->title;
?>
——————
VSCxmlファイル読み込み
こちらまずは変数$xmlTreeにrss.xmlの情報を代入します。
この際にsimplexml_load_file()でrss.xmlの情報を読み込んでいるのですが、前回の記事で出てきました読み込みとは違いrss.xmlを解析しています。

そしてそのrss.xml内のタグ内の<title>タグで囲まれた文章を出力するようにします。
rss.xmlを確認してみますとタグ内の<title>タグで囲まれた文章はサンプルとなっています。
rss.xmlの指定場所

それでは上書き保存し、ブラウザの表示を確認してみます。
ブラウザ表示確認rss.xmlの指定場所
サンプルと表示されていましたら正しく動いていることになります。

上記では<channel>タグの直下にある<title>タグで囲まれた文章を出力しています。
そこで今度は、複数あるタグで何番目のタグの文章を読み込むかを指定してみます。

xmlファイルには<item>タグが多く使われており、その中にも<title>タグが含まれています。
では試しに2番目の<item>タグの中にあります<title>タグで囲まれた文章を出力してみます。
ここで使用するのが「【第八回】PHPでシステム開発を実践!基本的な構文⑤」で取り上げました配列です。

まずはxmlファイルの2番目の<item>タグの中にあります<title>タグで囲まれた文章を確認してみます。
今回は「2つ目のitemタグのタイトル」となっており、こちらがブラウザに出力されれば正しく動いていることになります。
VSC2つ目のitemタグのtitle

それでは以下のプログラムを入力してみます。
——————
<?php
$xmlTree = simplexml_load_file(‘rss.xml’);
echo $xmlTree->channel->item[1]->title;
?>
——————
VSC2つ目のitemタグのtitleを出力する
<item>タグの順番を指定する際は配列を使い、0から数えますので2番目は1となります。
その中の<title>タグで囲まれた文章を出力するように指定しています。
それでは上書き保存をし、ブラウザの表示を確認してみます。
ブラウザ表示確認2つ目のitemの中のtitle
しっかり「2つ目のitemタグのタイトル」と表示されています。

さてそれでは今度は全ての<item>タグの中にある<title>タグで囲まれた文章を出力してみます。
ここで使用するのがforeachです。
foreachについても「【第八回】PHPでシステム開発を実践!基本的な構文⑤」で取り上げていますのでもしよろしければご覧ください。

まずは以下のように入力してみます。
——————
<?php
$xmlTree = simplexml_load_file(‘rss.xml’);
foreach($xmlTree->channel->item as $item){
echo $item->title .'<br>’;
}
?>
——————
VSCxmlファイル読み込み
foreachで繰り返し処理を行いますので、<item>タグを1つ1つ$itemに代入して処理をします。
今回はブラウザに<title>タグで囲まれた文章を出力するという処理を繰り返し行っています。
それでは上書き保存し、ブラウザの表示を確認してみます。
ブラウザ画像xmlファイル読み込み
全ての<title>タグで囲まれた文章が表示されていましたら正しく動いていることになります。

参考:simplexml_load_file

JSONファイルを読み込む

次はJSONファイルというファイルを読み込んでみます。

JSONファイルとは

テキスト形式のデータファイルで、Javascriptのためのファイルです
ただ最近ではPHPをはじめ様々なプログラム言語でも使用することができ、簡単に扱うことができるようになっています。
用途としましては、データ交換ができます。
今回はPHPでJSONファイルにアクセスし、データを読み込んでみたいと思います。

参考:JSONファイル 【.jsonファイル】 JSON file
参考:JSONファイルとは?基本構造からファイルの読み書き方法まで解説

PHPでJSONファイルを読み込む

それではまずは先ほどと同様、JSONファイルを用意します。
JSONファイルもネットで検索しますとサンプルがヒットしますのでダウンロードしましょう。
保存する際は、json形式でPHPのファイルと同じ階層に保存します。
今回は「generated.json」という名前で保存しています。
VSCjsonファイル保存先

それでは簡単なところから始めたいと思います。
まずはjsonファイル内にありますdescriptionを読み込んでみましょう。
jsonファイルのdescription

以下のように入力してみます。
——————
<?php
$file = file_get_contents(‘generated.json’);
$json = json_decode($file);

echo $json->description;
?>
——————
VSCjsonファイル読み込み
上書き保存をし、ブラウザで表示を確認してみますとjsonファイルのdescription部分が解析され、ブラウザに表示されるかと思います。

こちらどのようなプログラムを入力したかといいますと最初にfile_get_contents()を使って、変数$fileに「generated.json」の内容を代入しています。
file_get_contents()でjsonファイルを読み込みます。
そしてさらに内容をjson_decode()で、PHPでも扱えるようにしています。
最後にechoで指定したdescription部分の文章を出力します。

こちらも先ほどxmlファイルの出力と同様、配列やforeach文を使って指定したところの文章を出力することが可能です。

参考:file_get_contents
参考:json_decode

JSONファイルを書き込む

次はJSONファイルを書き込んでみます。

JSONファイルを確認してみますと日本語が記号化されているのが分かります。
こちらのコードはjavascriptで解析するためのものなので、例えばPHPでJSONファイルを作ってそれをjavascriptで読み込むということもよくあります。

それでは早速、JSONファイルを作ってみます。
作る際、配列を使います。
以下のように入力してみましょう。
——————
<?php
$json_sample = [
“title” => “JSONサンプル”,
“items” => [
“りんご”,
“みかん”
] ];
$json = json_encode($json_sample, JSON_UNESCAPED_UNICODE);
echo $json;
?>
——————
VSCJSONファイル書き込み
上書き保存をし、ブラウザで表示を確認してみます。
ブラウザ表示JSONファイル書き込み
上記の例ですとtitle(タイトル)として「JSONサンプル」、items(アイテム)として「りんご」と「みかん」が定義されたJSONファイルが出来ました。

どのような処理を行ったかといいますと、まずjson_encode()でコード化しています。
カッコ内にありますJSON_UNESCAPED_UNICODEは、入力した文字をそのままの形式で扱ってくれます。
こちらが無いと日本語が正しく処理できず記号のような形で表示されます。
ただどちらでもシステム上、問題なく処理できますので、あってもなくてもどちらでもかまいません。
人から見て日本語がそのまま表示されている方が分かりやすいかと思いますので、入れた方が無難かもしれません。

こちらさらにファイルとして保存したい場合は、前回の記事で取り上げましたfile_put_contents()を使います。

先ほどの例で試してみます。以下のようにfile_put_contents()を追記します。
——————
<?php
$json_sample = [
“title” => “JSONサンプル”,
“items” => [
“りんご”,
“みかん”
] ];
$json = json_encode($json_sample, JSON_UNESCAPED_UNICODE);
echo $json;
file_put_contents(‘json_sample.json’, $json);
?>
——————
VSCJSONファイルをテキスト化
上書き保存をし、ブラウザを再読み込みします。
するとプログラムを実行したPHPファイルと同じ階層に「json_sample.json」というファイルが保存されていることが確認できます。
json_sample.json保存先
「json_sample.json」を開いて確認してみますと先ほどブラウザに表示された内容が記載されています。
ファイルがうまく保存されていることが確認できました。
VSCJSONファイルの内容
以上でJSONファイルの書き込みは終わりです。

参考:json_encode
参考:定義済み定数

まとめ

今回はxmlファイルとJSONファイルの読み込みと書き込みについて取り上げました。
前回よりもさらに複雑になりましたが、出てきた関数がどのような用途で使われるのか把握していますとプログラムを組むことにそこまで壁を感じなくなるかと思います。
1つ1つマイペースでいいので使っていきますと、理解を深められるのではないでしょうか。

この記事をシェアしましょう!