• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XMLのタグの有無をPHPで判定したい。)

PHPでXMLのタグの有無を判定する方法

このQ&Aのポイント
  • PHPを使用してXMLのタグの有無を判定する方法について説明します。XMLファイル中に特定のタグが存在するかどうかを判定することで、エラーを回避することができます。
  • 具体的には、getElementsByTagName関数を使用して特定のタグの要素を取得し、その要素が存在するかどうかを判定します。isset関数を使用することで、要素が存在するかどうかを確認できます。
  • タグが存在しない場合には、取得した要素は空であるため、isset関数での判定結果はfalseとなります。このため、isset関数を使用した条件分岐を行うことで、タグの有無を判定することができます。

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

  • ベストアンサー
回答No.2

getElementsByTagNameはNULLを返しません。必ず、DOMNodeListを返します。 そしてDOMNodeListは、lengthというプロパティを持ちます。 ので、 <?php $omake = $doc->getElementsByTagName('omake'); echo $omake->length; //存在しないなら『0』を返します。 ?> といった感じです。

LC-32SC1
質問者

お礼

どうもありがとうございます。 なるほど、そうやって判定をするんですね。 解説、とてもよく分かりました。 ありがとうございます。 問題解決です! ちなみに、以下のような判定方法では、 ダメでしょうか? 何か、抜け はありますか? $items = $doc->getElementsByTagName('omake'); if($items->item(0) !== NULL){  echo 'omakeタグはあります!'; }

その他の回答 (2)

回答No.3

その方法でも出来るのであれば問題ないのでしょうけど、メソッドを叩くだけ、オーバーヘッドになるので、 プロパティで値が引けるのであれば、プロパティで値を確認したほうが良いと思います。 そして、正しく引く方法が提供されているのに使わない、というのは筋が悪い、と私は思います。 ちなみに、限定してXMLを操作するなら、 http://jp2.php.net/manual/ja/book.simplexml.php こちらもありますので、何か使い勝手の面で思うところがあったら、試してみても良いかもしれません。

LC-32SC1
質問者

お礼

どうもありがとうございます。 とても勉強になりました。 教えて頂いた方法で判定するように致します。 私が書いたもう1つの方法は、 今回教えて頂くまでの間にvar_dump()を使って試行錯誤した結果、 偶然、見つけた方法だったので、 良いか悪いかよく分からずに使っておりました。 ちゃんとした方法があるのであれば、 そちらを使えるようになりたいので、 教えて頂き、とても助かりました。

noname#243182
noname#243182
回答No.1

XPath を使って要素の有無を確認してはいかがでしょうか。

参考URL:
http://jp.php.net/manual/ja/class.domxpath.php
LC-32SC1
質問者

お礼

どうもありがとうございます。 結論から先に言うと、解決しましたが、 できなかった原因は、XPathでやらなかったことにあるのではなく、 isset()で判定したことにありました。 if($hoge !== NULL){~~~;} として判定すると上手くいきました。 if(isset($hoge)){~~~;} ではダメなのです。 $hoge が NULLかどうかの判定には、どちらで判定しても、 結果は同じだと思っていたのですが、実際には、ハッキリと違いました。 なぜ違うのかについて、もしご存知の方は、是非教えて下さい。

関連するQ&A