PHPでRSSリーダーを作っています。

<content:encoded>にも対応させ、本文も表示させようと思い、http://weather.goo.ne.jp/area/4220.rdfに対し、下記のようなコードで表示させようとしましたうまく行きません。<title>や<description>とは異なった表示方法が必要なのでしょうか?
$title=$myar[TITLE][$i+1];
$title = mb_convert_encoding($title, "SJIS", "auto");
$text=$myar[DESCRIPTION][$i+1];
$text = mb_convert_encoding($text, "SJIS", "auto");
$contents = $myar["CONTENT:ENCODED"][$i+1];
$contents = mb_convert_encoding($contents, "SJIS", "auto");

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/07 15:16:22
  • 終了:2007/03/14 15:20:03

回答(3件)

id:inokuni No.1

いのくに回答回数1343ベストアンサー獲得回数212007/03/07 15:46:21

ポイント27pt

$myar に値を代入するする箇所の code を記述されないと何とも答えられませんよ。

http://www.php-resource.de/forum/showthread/t-55730.html

id:jcf01700

すいません おっしゃるとおりでしたね。

$myar=getXmlData($data);で下記を呼び出しています。

function getXmlData($xml_doc) {

$n=0;

$ar=array();

$parser = xml_parser_create();

xml_parse_into_struct($parser,$xml_doc,$vals,$index) or exit(xml_error_string(xml_get_error_code($parser)));

xml_parser_free($parser);

$ttags=array();

for($n=0;$n<=count($vals)-1;$n++) {

if(trim($vals[$n][value])) {

$ar[$vals[$n][tag]][count($ar[$vals[$n][tag]])]=$vals[$n][value];

$ttags[$vals[$n][tag]]=$vals[$n][tag];


}

}

$tags=array();

foreach($ttags as $tagi) { array_push($tags,$tagi); }

return $ar;

}

2007/03/07 20:53:30
id:kidd-number5 No.2

kidd-number5回答回数117ベストアンサー獲得回数152007/03/07 18:32:31

ポイント27pt

titleやdescription要素の中身はテキストノードですが、content:encode内部にはCDATAノードが入っているので、

たとえば(単なる予想ですが)こんなふうに

xml_set_character_data_handler($parser, 'cdata');

function cdata($parser, $cdata){
    $myar["CONTENT:ENCODED"][] = $cdata;
}

CDATAを扱うためのコードを書く必要があると思います。

http://jp.php.net/xml

id:kidd-number5 No.3

kidd-number5回答回数117ベストアンサー獲得回数152007/03/09 10:37:17

ポイント26pt

print_r($myar);

http://jp2.php.net/print_r

したときに、

Array(
(略)
    [DESCRIPTION] => Array
        (
            [0] => <なにか>
        )
(略)
    [CONTENT:ENCODED] => Array
        (
            [0] => <なにか>
        )
)

ってなれば$myar['CONTENT:ENCODED']で取れると思うのですが、そうなっていないとなると取れないでしょうね。

手元のPHP(5.2)では上記のように出てきたのですが、バージョンによるのかもしれません。バージョンはいくつですか?

#回答回数の都合でここまでしかコメントできませんが。

id:jcf01700

ありがとうございます

色々やってみたのですが、上記の関数function getXmlData($xml_doc)の内部だと、 [CONTENT:ENCODED]のCDATAセクションがきちんと読めます。

結局、かっこ悪いですが、関数内でグローバル変数に直接書き込むことで対応しました。

2007/03/09 11:33:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません