simplexmlでどうやって値を取得するか
simplexmlでいろいろお試し中。現時点では「タグにコロンが含まれていた場合」の挙動を除けば快適に使えているのだが、少しだけ困った問題が起こった。問題自体は解決できたのだが、それに気づくまでちょっと時間がかかってしまったのと、スマートなやり方でないような気がしたのでちょっとメモ。
xml内の特定のタグでくくられた「値」を取得するのに、以下のように記述した。
$xmlObj =simplexml_load_string($result);
$status=$xmlObj->Header->Status;
var_dump($status);
個人的には’Success’とか’Error’とかの文字列を期待したのだが、出力された結果はこんな感じ。
object(SimpleXMLElement)#4 (1) { [0]=> string(7) “Success” }
オブジェクトが返された。まぁ、これはこれでいいのだけれど、このときに’Success’という文字列を取得する方法がわからなくて困った。「$status->0」なんてしてもやっぱり取得できない。でも、不思議なことに「print」すると「Success」と表示される。なぜ。
結論から言うと、strval($status)とすることで文字列を取得できた。これってスマートな方法なんだろうか。他に関数とか用意されていないのかな。後述の「printすれば」というとこをは理解できた。自動的に型変換されて出力されていたわけ(自動変換はいい場合もあれば、事を複雑にする可能性もあることを実感)。
ま、とりあえず、できた。
2009/04/24 at 11:48 AM
三行目を、
var_dump((string)$status);
で、どうですか。
二行目をvar_dump((string) $xmlObj->Header->Status);
とする方が意味論的に良いかもしれないですけども(よく知りませんが^^;)
2009/04/24 at 12:33 PM
「strval()関数を使う方法」と「(string)による型のキャスト」の違いで(string)を使うほうがよいとのご指摘でしょうか。それとも記事を最後まで読んでないだけ?。