Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

SimpleXMLElement Objectの参照

内容

久しぶりにxmlをパースする処理を書いていたんだけど、SimpleXMLElement Objectの参照方法を忘れていたのでメモをしておく。(20120416追記) 今まではサンプルプログラム中のforeachで$resultに添字$iでインクリメントして値を代入していましたが、$iを使わずに配列の[]を使って右辺のarray型を代入するように修正しました。

xmlサンプル

<?xml version="1.0" encoding="Shift-Jis" ?>
<venture>
  <company>
    <name>ソフトバンク株式会社</name>
    <url>http://www.softbank.co.jp/</url>
  </company>
  <company>
    <name>楽天株式会社</name>
    <url>http://www.rakuten.co.jp/info/</url>
  </company>
</venture>

simplexml_load_string関数

PHPの関数によりSimpleXMLElement ObjectとしてParseを行う。SimpleXMLElement Objectを更にPHP配列に整形してゆく。

<?php

$xml = <<<XML
<?xml version="1.0" encoding="Shift-Jis" ?>
<venture>
  <company>
    <name>ソフトバンク株式会社</name>
    <url>http://www.softbank.co.jp/</url>
  </company>
  <company>
    <name>楽天株式会社</name>
    <url>http://www.rakuten.co.jp/info/</url>
  </company>
</venture>
XML;

print( $xml . "\n" );
$data = simplexml_load_string( $xml );
print_r( $data );

simplexml_load_string関数の実行結果

xmlがSimpleXMLElement Objectに変換されていることが分かる。

SimpleXMLElement Object
(
    [company] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [name] => ソフトバンク株式会社
                    [url] => http://www.softbank.co.jp/
                )

            [1] => SimpleXMLElement Object
                (
                    [name] => 楽天株式会社
                    [url] => http://www.rakuten.co.jp/info/
                )

        )

)

SimpleXMLElement Objectの値参照

SimpleXMLElement ObjectのNodeはアロー演算子で参照可能。

<?php

()

$data = simplexml_load_string( $xml );
print_r( $data );
foreach( $data->company as $value ) {
    $result[] = array( 'name' => $value->name, 'url' =>$value->url );
}
print_r( $result );

アロー演算子で参照した値

下はまだSimpleXMLElement Objectの参照になっている。完全なphp配列にしたい。

Array
(
    [0] => Array
        (
            [name] => SimpleXMLElement Object
                (
                    [0] => ソフトバンク株式会社
                )

            [url] => SimpleXMLElement Object
                (
                    [0] => http://www.softbank.co.jp/
                )

        )

    [1] => Array
        (
            [name] => SimpleXMLElement Object
                (
                    [0] => 楽天株式会社
                )

            [url] => SimpleXMLElement Object
                (
                    [0] => http://www.rakuten.co.jp/info/
                )

        )

)

castを使って値を格納する

配列に格納する場合はSimpleXMLElement ObjectのNodeをcastさせる。上のphpプログラムを次のように変更する。

<?php

()

$data = simplexml_load_string( $xml );
print_r( $data );
foreach( $data->company as $value ) {
  $result[] = array( 'name' => (string)$value->name, 'url' => (string)$value->url );
}
print_r( $result );

castの実行結果

これで純粋なphp配列に置き換えることができた。

Array
(
    [0] => Array
        (
            [name] => ソフトバンク株式会社
            [url] => http://www.softbank.co.jp/
        )

    [1] => Array
        (
            [name] => 楽天株式会社
            [url] => http://www.rakuten.co.jp/info/
        )

)