simplexmlでどうやって値を取得するか

2009/03/12 | XML

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すれば」というとこをは理解できた。自動的に型変換されて出力されていたわけ(自動変換はいい場合もあれば、事を複雑にする可能性もあることを実感)。

ま、とりあえず、できた。

2件のコメント

  1. 通りすがり :

    三行目を、
    var_dump((string)$status);
    で、どうですか。
    二行目をvar_dump((string) $xmlObj->Header->Status);
    とする方が意味論的に良いかもしれないですけども(よく知りませんが^^;)

  2. かおるん :

    「strval()関数を使う方法」と「(string)による型のキャスト」の違いで(string)を使うほうがよいとのご指摘でしょうか。それとも記事を最後まで読んでないだけ?。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net