php simpleXmlElementにオブジェクトついて
環境的にはphp7のLAMP環境です。(php以外は詳しい情報は特にいらないと思ったので記述なし)
データ取得時にオブジェクトからデータを取るときに一瞬『ん?』となったのでメモ
$xmlstr = <<< XML
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<Documents>
<Document>
<name>私はエンジニアです</name>
<type>コツコツ</type>
<age>1</age>
</Document>
</Documents>
XML;
例えばこんなXMLがあったとします。
そうするとXML文字列を引数にSimpleXMLElementでオブジェクトを作成
$xml = new \SimpleXMLElement($xmlstr);
var_dump($xml);
出力 → object(SimpleXMLElement)#38 (1) { ["Document"]=> object(SimpleXMLElement)#43 (3) { ["name"]=> string(27) "私はエンジニアです" ["type"]=> string(12) "コツコツ" ["age"]=> string(1) "1" } }
こんなデータオブジェクトが出来上がるんですが例えばageの要素を取得したいときに
var_dump($xml->Document->age);
出力 → object(SimpleXMLElement)#50 (1) { [0]=> string(1) "1" }
こうなるんです
『ん?』
まあいいですオブジェクトですもんね。でもこのあとどうとったらいいの??
もちろん$xml->Document->age[0]こうでも$xml->Document->age->0でもないわけです
どうやって取るんだ?って一瞬思いましたが昔(7年ほど前かな)使っていたのをすぐ思い出しました!
配列に型変換して扱っていました。
var_dump((array)$xml->Document->age);
出力 → array(1) { [0]=> string(1) "1" }
なにか処理するんであればまとめてやっちゃったほうがいいかもしれませんね。
var_dump((array)$xml->Document);
出力 → array(3) { ["name"]=> string(27) "私はエンジニアです" ["type"]=> string(12) "コツコツ" ["age"]=> string(1) "1" }
ちなみに一つのデータをピンポイントで使いたいなら
var_dump((string)$xml->Document->age);
出力 → string(1) "1"
こうなるので便利です
以上備忘録メモでした
コメント
コメントを投稿