• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:xml取得値を文字列と比較)

xml取得値を文字列と比較

このQ&Aのポイント
  • オブジェクト型と文字列の比較で困っている
  • XMLの特定の要素と文字列を比較する方法がわからない
  • PHPでxpathを使ってxml取得値を配列に書き出したい

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ちょっと読み取れているかどうか自信がありませんが、やりたいのはこういうことでしょうか? <?php $cd = '00003'; $filename = 'sample.xml'; if($xml = simplexml_load_file($filename)){ $data = array(); $cnt = count($xml); for($i=0; $i<$cnt; $i++){ $dno = 'data' . $i; if($xml->$dno->cd[0] != $cd){ $data[] = $xml->$dno->nm[0]; } } print '<pre>'; var_dump($data); print '</pre>'; }

prr4e
質問者

補足

返答有難う御座いました。 なぜか以前に試した、 $cd !== strval($xml->$dno->nm)でうまく行きました。 折角回答頂いたのにすみません。 因みに print_r($xml->$dno->nm)をすると、 SimpleXMLElement Object ( [0] => 0003 ) で出力されるので、$xml->$dno->cd[0]で指定するんですよね。 $xml->$dno->nm と $xml->$dno->nm[0] の比較の違いはなんなんでしょう。 ご存知でしたら教えて頂けないでしょうか。

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

simplexml って確か文字列にキャストしてくれたよな、、、と思って調べてみると案の定、何の問題も無く、文字列にキャストできる。 もう一度、strval などでキャストしてみてはいかがだろうか。 XPathを利用するなら仕様を一度は目を通されてはいかがだろうか。 /cd とした場合ルートの下の QName cd の要素を探しにいく。件のXMLにはルート配下に cd が無いため空の配列を返す。 要素 cd が必要な場合、やや乱暴になるが //cd 又はパスを通して /item/*[starts-with(local-name(),"data")]/cd 前者はすべての階層に属する cd を探すため厳密ではない。かといって後者も data で始まる子要素を探しているに過ぎないため、こちらも厳密ではない。 data0 や data1 は何を抽象化しているのかわからない。やるなら、data で抽象化し、属性値で連番を持たせてやればいい。

prr4e
質問者

補足

返答有難う御座いました。 なぜか以前に試した、 $cd !== strval($xml->$dno->nm)でうまく行きました。 折角回答頂いたのにすみません。 >data0 や data1 は何を抽象化しているのかわからない。やるなら、data で抽>象化し、属性値で連番を持たせてやればいい。 こちらは汎用的にdata0,data1,data2と、順番を判定する為にもっています。 勉強不足で、/item/*[starts-with(local-name(),"data")]/cd を理解できていませんが、"data"を変数化する場合はどのようにしたら宜しいのでしょうか。 お手数ですが、ご教授願えないでしょうか。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> arrayとしか表記されません。 array としか出ないなら、print_r してみるといいと思いますよ。 と、投げやりな回答をしてみる。 その「arrayとしか表記されない」件に関して、ちゃんと説明すると、「array」って表示されるのは、「その変数は配列ですよ」って事か、そのまんま「array って 文字列が入ってる」って事のどっちかです。 文字列かどうかは is_array すりゃ分りますが。

prr4e
質問者

補足

返答有難う御座いました。 var_dumpやprint_rなどはして実行してみたのですが、 echo分で単体で表示されないから、 全て比較がfalseとなり、全件表示されている事は 知っていたのですが、 色々アドバイスを受けながら何とかできました。 有難う御座いました。

関連するQ&A