フォームからキーワードを受け取り、それを、xmlを参照しながらphpで出力したいのですが、最後の最後でつまずきます。
------------------
<?php
$doc = new domDocument();
// DOMDocumentオブジェクトにより、インスタンスを生成
$doc->load("./beta.xml");
// ファイルからXML文書を読みこむ
$kywd = $_REQUEST['kywd'];
// フォームからデータを受け取る
$nodelist = $doc->getElementsByTagName('keyword');
// 指定した要素名(keyword)の全ての要素を取得
foreach ($nodelist as $node) {
// 各要素を参照
if($kywd == $node->textContent){
// もし、フォームから受け取ったデータが要素と一致したら
$xurl = $node->namespaceURI;
// 要素の名前空間URLを取得して$xurlに代入
$xml = simplexml_load_file("./beta.xml");
// SimpleXMLによってXMLファイルをパースし、simplexml_elementオブジェクトを作成する
$parent = $xml->children("$xurl");
// 指定したノードの子ノードの配列を取得
$hairetsu = $parent[0]->children("$xurl");
//取得した配列素$hairetsuに代入
foreach($hairetsu as $key=>$value) {
// ちゃんと連想配列になっているか、ためしに出力
print ($key."→".$value."<br />");
}
// 連想配列になっていることを確認
print $hairetsu["title"];
// しかし、キーを指定して値を取得しようとすると、なぜか得られない。
}
}
?>
問題は最後のほうです。連想配列になっていることは確かに確認できる(titleというキーも、その値もある)のですが、連想配列のキーから値を参照しようとすると、なぜか値がNULLになっていて表示できません。私は趣味でプログラミングをする程度なので、おそらく基本的なところで間違っているのだと思いますが、それがどこだか分かりません。お教え願えないでしょうか。
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の構造の勘違いではないかと思います。
おお!できました!
なにぶん、プログラミング初心者なので、私の知識では質問したプログラム以外の手段が思いつかなかったのです。
私も、「我ながら回りくどいプログラムだなー」と思っていたので本当に助かりました!ありがとうございました。
No.1
- 回答日時:
beta.xml を補足していただけないでしょうか
この回答への補足
すいません。字数制限のために書き込めないでいました。
-----
[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>の要素(この場合、「ヤフー」と「ぐーぐる」)を取り出したいのです。簡単に言えば、「キーワード」を参照して「タイトル」を得たいのです。
すいません。まだ「教えてgoo」でID取ったばかりで、使い方をよく理解していないのですが、「補足」に書いた内容が間違っていたので訂正します
------------
例えば、フォームから「ポータルサイト」というキーワードを受け取ったときに、「キーワード」と言う<uri:keyword>を持っているノードと同じ名前空間URIをもつ<uri:title>の要素(この場合、「ヤフー」と「グーグル」(「ぐーぐる」ではない))を取り出したいのです。簡単に言えば、「キーワード」を参照して「タイトル」を得たいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでの簡易ビンゴゲームでの疑...
-
PHPでテキストファイルの一部を...
-
配列を分解したいのですが
-
配列をループでたくさん宣言し...
-
配列を回すとき、最後の要素だ...
-
String だと「 ByRef引数の型が...
-
配列一致(要素順番は違うが内容...
-
phpで、連想配列を普通の配列に...
-
OCI で、SELECT結果行数を取得...
-
foreachのなかで次のキーを参照...
-
file_existsでファイル名の部分...
-
PHPにてクラスを配列にすること...
-
PHPのカッコ[ ]の使い方について
-
スカラーのベクトル微分
-
別ファイルの構造体の値を読み...
-
PHPで連想配列のプルダウンメニ...
-
バイナリファイルの内容を、そ...
-
C言語で全角文字の扱いについて
-
verilogで、配列の一部をタスク...
-
ヒアドキュメントの中のfor文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列をループでたくさん宣言し...
-
String だと「 ByRef引数の型が...
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
$_SESSIONに二次元配列を使える...
-
PHPのカッコ[ ]の使い方について
-
$_SESSIONについて教えて下さい。
-
配列を回すとき、最後の要素だ...
-
ネストが深い時のforeachはどう...
-
配列一致(要素順番は違うが内容...
-
PHPにてクラスを配列にすること...
-
配列の値の更新方法について
-
postgresql関数をつかったレコ...
-
PHPで配列をPOSTデータで送った...
-
PHP 多次元配列変数のデータ受...
-
漢字のソートについて
-
チェックボックスが複数選択で...
-
$_POSTを一括してサニタイズし...
-
smarty 同じ要素内で改行
-
配列のbindValue方法について
おすすめ情報