• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phpのSimpleXMLでXMLの要素を参照したい。)

SimpleXMLでXMLの要素を参照する方法とは?

このQ&Aのポイント
  • phpのSimpleXMLを使用してXMLの要素を参照する方法について教えてください。
  • フォームから受け取ったキーワードを使用して、phpでXMLファイルを参照し、要素を出力する方法を知りたいです。
  • SimpleXMLを使用してXMLの要素を連想配列から参照する際のエラーについても解説していただきたいです。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>「キーワード」を参照して「タイトル」を得たい 余計なお世話かもしれませんが、 この場合、「タイトル」は、キーワードの親ノードの子ノードなので、いちいち、名前空間で限定する必要は無いように思います。 そして、DOMだけで操作できます。 例えばこんな感じ。 ---------------------------------------------------------------- <?php #encoding UTF-8 $doc = new domDocument(); $doc->load("./beta.xml"); $kywd = 'ポータルサイト';#$_REQUEST['kywd']; $nodelist = $doc->getElementsByTagName('keyword'); foreach ($nodelist as $node) { if($kywd == $node->nodeValue){ $titles = $node->parentNode->getElementsByTagName('title'); $title = $titles->item(0)->nodeValue; print mb_convert_encoding($title,"SJIS","UTF-8") . "\n";#必要に応じて文字コード変換 } } ?> ---------------------------------------------------------------- 元のプログラム(を試してはいませんが)でうまくいかない理由は、多分文字コードに起因するもの、あるいはsimpleXMLの構造の勘違いではないかと思います。

bunoo
質問者

お礼

おお!できました! なにぶん、プログラミング初心者なので、私の知識では質問したプログラム以外の手段が思いつかなかったのです。 私も、「我ながら回りくどいプログラムだなー」と思っていたので本当に助かりました!ありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

beta.xml を補足していただけないでしょうか

bunoo
質問者

お礼

すいません。まだ「教えてgoo」でID取ったばかりで、使い方をよく理解していないのですが、「補足」に書いた内容が間違っていたので訂正します ------------ 例えば、フォームから「ポータルサイト」というキーワードを受け取ったときに、「キーワード」と言う<uri:keyword>を持っているノードと同じ名前空間URIをもつ<uri:title>の要素(この場合、「ヤフー」と「グーグル」(「ぐーぐる」ではない))を取り出したいのです。簡単に言えば、「キーワード」を参照して「タイトル」を得たいのです。

bunoo
質問者

補足

すいません。字数制限のために書き込めないでいました。 ----- [beta.xml] <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <sites> <uri:site xmlns:uri="http://www.yahoo.co.jp/"> <uri:title>ヤフー</uri:title> <uri:keyword>ポータルサイト</uri:keyword> <uri:keyword>ヤフージャパン</uri:keyword> </uri:site> <uri:site xmlns:uri="http://www.google.co.jp/"> <uri:title>グーグル</uri:title> <uri:keyword>ポータルサイト</uri:keyword> <uri:keyword>ぐーぐる</uri:keyword> </uri:site> <uri:site xmlns:uri="http://www.msn.co.jp/"> <uri:title>MSN</uri:title> <uri:keyword>portal</uri:keyword> <uri:keyword>エムエスエヌ</uri:keyword> </uri:site> </sites> ------------ 例えば、フォームから「ポータルサイト」というキーワードを受け取ったときに、「キーワード」と言う<uri:keyword>を持っているノードと同じ名前空間URIをもつ<uri:title>の要素(この場合、「ヤフー」と「ぐーぐる」)を取り出したいのです。簡単に言えば、「キーワード」を参照して「タイトル」を得たいのです。

関連するQ&A