エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


XML形式の値を配列形式に変換・PHPでは simplexml_load_string()

   

XML形式の値を PHPで配列に変換する処理

 

XMLとは?

 
XMLとは、「Extensible Markup Language」の略で、JSONと同じくテキストベースのデータフォーマットです。
JISによる訳語は「拡張可能なマーク付け言語」で、任意の用途向けの言語に拡張することを容易にしたマークアップ言語の総称になります。
 
見た目は HTMLに似ていますが、XMLでは各項目ごとにデータの情報を持っていますので、プログラムでデータベースのように容易に扱うことができるようになっています。
 
 
Webサービスでの利用方法では、他サービスから APIを利用してデータを取得する場合のデータの受け取り方法として、JSON形式や XML形式でデータを受け渡しする場合が多々あります。
 
JSONに関しては「JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()」の記事を参照してください。
 
 
今回の記事では、XML形式のデータを配列形式に変換するツール「XMLを配列に変換するツール」の紹介と、ツールの処理に関する解説を行います。
 
 

XML形式のデータのサンプル

 
この記事を書いていた時とほぼ同じタイミングで公開したツールに以下の 2つがあります。
 2点間の直線距離計算ツール(地点1の緯度に基づき簡易計算)
 
 路線・駅検索+駅からの距離検索
 
それぞれのツールに関する解説は以下の記事を参照してください。
路線・駅検索のために緯度経度からPHPで2点間の距離を計算する処理解説
路線・駅検索をPHPで実装する方法解説。GoogleMapsの緯度経度から計算し検索
 
 
このツールを作成する際に利用した「路線・駅」のデータ、および、APIは「駅データ.jp」を利用させていただいています。
「駅データ.jp」の APIを利用した場合、路線や駅の情報は、JSON形式か、XML形式かのいずれかで取得することができます。
 
その「駅データ.jp」の「路線API」から「りんかい線」の路線情報を取得した XMLの値が下記の様になります。
 

 
下記サイトから取得。
http://www.ekidata.jp/api/api_line.php
 
上記の情報が XML形式のデータなのですが、APIに対して「『りんかい線』の路線情報をください」という指示を出すと返ってくるデータです。
 
APIを利用する側のプログラムは、今回私が使用した PHPをはじめとして、Perl(CGI)、Python、Rubyなど様々です。
そのとき、何か特定の言語に依存する形で情報が戻ってくると、受け取る側のプログラムも限定してしまう可能性が出てきます。
 
そのため、どういう言語であっても支障なく情報のやりとりができるようにしたものが、テキストベースのデータフォーマットであり、その一つの形式が XMLということになります。
 
XMLは、HTMLのように、値が項目名が指定されたタグで囲まれる形式になっています。
これが XML形式のデータです。
 
これを受け取った後、PHPなら PHPで、そのプログラムで扱いやすいような配列などの形式に変換して使用するわけです。
 
 
「XMLってなに?」っていう事を検索してみてもイマイチなんだかよく分からない説明のサイトしかないのは、具体的な説明なしに理解することが難しいからでしょう。
 
 

XMLを配列に変換するツール」とは?

 
XMLを配列に変換するツール」は、入力された XML形式のデータを配列形式に変換するツールです。
 
この記事は、この「XMLを配列に変換するツール」を紹介する記事なのですが、「XMLを配列に変換するツール」は、XML形式のデータを配列形式に変換するだけの機能しかなく、非常に単純なツールです。
 
そもそもは、「JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()」に書いていますが、「JSONの値のデコードツール」を作成したのですが、XMLの変換ツールもあればそのうち使うんじゃないか、と思い作ったものです。
まぁ、「JSONの値のデコードツール」の JSONの変換処理を XML変換処理に変えただけのツールですが...
 
 

simplexml_load_string()で XML形式を配列に変換

 
XMLを配列に変換するには、一度 XMLをオブジェクトに変換し、そのあと配列に変換する、という 2段階の手順を採ります。
 
 

 
第一引数に、XML形式の値を編集します。
基本的にはこれだけでOKです。
 
第二引数以下はマニュアルを参照してください。
 http://php.net/manual/ja/function.simplexml-load-string.php
 
 
「simplexml_load_string()」関数を実行して取得できる値は、Object形式の値になります。
Object形式で表示する(処理する)ことで問題なければ、「simplexml_load_string()」関数を実行して取得した値をそのまま「print_r()」関数で表示すれば OKです。
 
ですが、ここでは配列にすることを目的としていますので、「simplexml_load_string()」関数で取得した Object形式のデータを、「json_encode()」関数で JSON形式に変換し、「json_decode()」関数で配列に変換する、という手順を採ります。
 

 
 
「json_encode()」関数、「json_decode()」関数の詳細については「」の記事を参照してもらえれば、と思いますが、「json_decode()」関数は、第二引数に「true」を指定することで配列として取得することが可能になります。
 
そのために、オブジェクトを一度 JSON形式にエンコードし、改めて配列にデコードしなおすという手順を採っています。
これは、PHPには、オブジェクトを配列に変換する関数が存在しないためです。
 

 - PHP・Smarty・ECCUBE

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

ECCUBEの問い合わせフォームに任意の値を引数として渡す方法

ECCUBEのお問い合わせフォームに値を固有の情報を送りそれに基づいて処理をする方法を解説。ボタンの設置、受け取り側のテンプレート、プログラムのサンプルソースを提供。

Smartyの Syntax Errorの原因はスペースかも

Smartyのなかなか原因がつかめない Syntax Errorの原因はスペースかもしれません。

ECCUBEでアップロードできない。upload_max_filesizeを設定する場所

テンプレートをアップロードする際に発生するエラー「テンプレートファイルがアップロードされていません」の対処方法。これはファイル容量の制限に引っかかっています。

cURLを利用する際の注意点「&」があるURLは「"」で囲む
cURLを利用する際の注意点「&」があるURLは「」で囲む

cURLでURLはダブルクォーテーションで囲む。LinuxでもWindowsでもコマンドでは「&」は意味を持つ文字のためエラー原因になる。クォーテーションは常につけておく方が無難。

ECCUBEの管理画面のSSL設定をインストール後に変更する方法

ECCUBEをインストールした後から管理画面のSSL設定を変更する方法を解説します。config.phpファイルのHTTPS_URLとADMIN_FORCE_SSLの値を変更すればOK。

PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム
PHPで APIにアクセスする際などに使用する cURLのサンプルプログラム

PHPのcURLを使用して各種APIにアクセスするサンプルプログラムを作成し、その処理を解説。カオナビAPIのみならず、他の多くのAPIにアクセスする際にも使用できる。

QRコード(二次元バーコード)作成サービスを公開
QRコード(二次元バーコード)作成サービスを公開

QRコード(二次元バーコード)を生成するサービス。QRコードにする文字列を入力するだけで QRコードが簡単に作れる。オプションとして、画像サイズ、余白サイズ、エラー訂正レベルがある。

PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較
PHPのcURLでAPIやWebサイトへのアクセス方法。file_get_contentsとの比較

PHPからWebサイトにアクセスしてHTMLを取得、APIにアクセスして情報を取得する場合は、cURLがオススメ。file_get_contentsでも可能だがエラー制御に難がありトラブルのもとになる。

GMOペイメントゲートウェイのjava.io.IOExceptionのエラー

ECCUBEの決済でGMOペイメントゲートウェイのモジュールを使ってテスト決済を行った場合の不具合、java.io.IOExceptionと言うエラーの原因と対策方法の解説です。

PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある

PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。