• 締切済み

子ノードの出力について

xmlを出力する際にコロンを含んだ部分につまづいています。 xmlデータはhttp://www3.asahi.com/rss/index.rdf <dc:date>の部分ですが、いろいろなサイトを参考にした結果、 $date = $xml->item->dc->dateや $date = $xml->item->children('http://www3.asahi.com/rss/index.rdf') などとしてもエラーになってしまいます。 出力は echo $date としています。 phpのバージョンは5です。 アドバイスをお願いします。 (php.ini設定の必要がある場合は、こちらもお願いします。)

noname#129183
noname#129183
  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

回答No.2

改訂: $dc = $xml->channel->children( "http://purl.org/dc/elements/1.1/" ); 失礼

回答No.1

RDFファイル内にある、dcの名前空間URIをchildrenに使います。 index.rdf----------------------------------- <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/"・・・・・・・・> parser.php---------------------------------- $dc = $xml->children( "http://purl.org/dc/elements/1.1/" ); echo "date = " . $dc->date . "\n"; と<dc:date>がまさに$dc->dateとなっていますよね。 他の要素については以下のURLで確認くださいまし。

参考URL:
http://www.wiki.cc/php/Simplexml_basic

関連するQ&A

  • 外部のテキストファイルを読み込みたい

    はじめまして、phpを勉強しています。 ちょっとつまづいてしました。 質問をさせて下さい。 (phpは5.25の環境になります) $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); $rssarray = array(); $today = date(U); foreach ($mainrss as $url){ $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "UTF-8", "auto"); (省略) 上記の $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); 部分を $mainrssarray = file('rss.txt'); として外部テキストファイルからデータを呼び込もうとしたのですがだめでした。 rss.txtの内容 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' どのようにすれば外部のテキストファイルから呼び込んでくれるでしょうか? 初心者的な質問で大変申し訳ないんですが、アドバイスをよろしくお願い致します;;

    • ベストアンサー
    • PHP
  • IE7とFireFox2での動作

    RSSフィードを無効にしたいと思って、いろいろ調べたのですが、 先頭に、512Byteのコメントを入れれば、無効になるらしいので、 作成してみたのですが、どうも動きがおかしいです。お知恵をお貸しください。 次のように行うとIE7では、RSSフィードが無効になり、XSLTが有効になります。しかしFireFox2では、タグ等がなくなり、テキストのみが表示されてしまいます。動作を同じにしたいのですが、良い方法はないでしょうか? xxx.php(動的に出力するためXML部分は、phpで行っています) <?php print( "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" ); print( "<?xml-stylesheet type=\"text/xsl\" href=\"./xxx.xsl\"?>\n"); ?> <!-- 512byteの空白(省略)--> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns="http://purl.org/rss/1.0/"> <省略> </rdf:RDF>

    • ベストアンサー
    • XML
  • 他のサイト(RSS)を自サイトより出力したい

    現在、複数のrssをyahoopipesを使って合体させて出力しています。 自サイトにそのrssをHTML形式で表示はできているのですが、feedを参照すると、yahoopipesのアドレスになります。 そこで、このyahoopipesのアドレスを、自サイトが出力したかのようにしたいです。 http://pipes.yahoo.com/pipes/pipe.run?_id=**********&_render=rss を http://www.*****.com/feed.rdfやxml等 にしたいです。 なにかcgi・php等のプログラムを介して、自サイトにfeedファイルを出力できるものはないでしょうか。

    • 締切済み
    • PHP
  • xmlとrdfの違いはなんですか?

    rssフィードなどでは、xmlは文法で、rdfは拡張子になっていることが多い。しかし、xmlの文法にxmlの拡張子では駄目なのでしょうか? http://jin115.com/index.rdf

    • ベストアンサー
    • XML
  • MagpieRSSで異なる複数のブログを表示

    お世話になります。PHPの初心者です。 MagpieRSSを使用して、異なる複数のブログを1つの更新欄にまとめ、 最新記事を5件表示させたいです。 いろいろ参考にしながら、下記のようなソースを組み、 なんとか複数のブログを1つにまとめるまでは出来ました。 しかしながら件数の指定方法がわからず、困っています。 どのようにしたら5件表示できるようになるでしょうか? 宜しくお願い致します。 <?php require_once 'rss_fetch.inc'; require_once 'rss_utils.inc'; require_once 'jcode.php'; include_once 'rss_utils.inc'; define('MAGPIE_OUTPUT_ENCODING', 'UTF-8'); define('MAGPIE_CACHE_ON', false); $url = array( 'http://example1.com/index.xml', 'http://example2.com/index.xml', 'http://example3.com/index.xml', 'http://example4.com/index.xml'); for ($i = 0; isset($url[$i]); $i++) { $rss = fetch_rss($url[$i]); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "Shift_JIS", "UTF-8"); $rss->items = array_slice($rss->items, 0, 5); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "Shift_JIS", "UTF-8"); $item_url = $item[link]; $itemday = date('Y-n-j',strtotime(substr($item['dc']['date'],0,10))); $mday = date('w',strtotime(substr($item['dc']['date'],0,10))); echo "<li><strong>${itemday} $youbi[$mday] ${itemtime}</strong><a href=\"$item_url\">$title</a></li>\n"; } echo "\n"; } ?>

    • ベストアンサー
    • PHP
  • 急にXMLパースエラーが表示されるようになりました

    現在運営しているサイトでRSSを配信しています。 特にどこかをいじった覚えはないのですが 先月末ごろから急に以下のようなエラーがでるようになりました。 ※ブラウザはFirefoxを使っています。 XML パースエラー: 要素が見つかりません。 URL: http://www.○○○.com/index.rdf 行番号: 1, 列番号: 1: メールソフトでも受信しようとすると「有効なRSSファイルではありません」と表示されるようになりました。 文字コードの設定も確認したのですが原因がわかりません。 配信しているrdfファイルは以下のようになっております。 <?php $uri = "http://feeds.feedburner.jp/○○○"; $reqq = file_get_contents( $uri ); header("Content-type: application/xml"); print $reqq; ?> しくみはよくわかってないのですが 本体部分は別のファイルから読み込んでいます。 また、不思議なのは上記のhttp://feeds.feedburner.jp/○○○ 部分のURLにアクセスすると正常にRSS情報が表示されます。 本体ファイル <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="ja"> ...以下続く 原因がまったく特定できず困っております。 宜しくお願いいたします。

    • ベストアンサー
    • XML
  • RSSの格納、表示がうまくいかない

    データベースへの接続は完了したんですが、RSSの格納がうまくいきません。 エラー文も表示されず原因がわからないのですが、おかしな文はありますでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.php' ); //ファイルの先頭で読み込む try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 //SQL文を実行、結果を求める $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (data) values (?)'); //$url1配列から先頭のデータをとりだして$urlに渡す なくなるまでループする foreach ($url1 as $url) { //rssがほしいから、もらった$urlを渡す if (($rss = @simplexml_load_file($url)) === false) continue; // RSSタイトルがほしいから、もらったrssを渡す $site_title = $rss->channel->title; //初期のカウント $count = 0; //itemを取り出して$rssに渡す ループ foreach ($rss->item as $item) { //8件を超えたとき取得を終了する if (++$count > 8) break; //タイトル、リンクを取得 $title = $item->title; $link = $item->link; //RSSの情報を取得 $dc = $item->children('http://purl.org/dc/elements/1.1/'); //RSS日付け取得 $date = date('Y-m-d H:i:s', strtotime($dc->date)); // $title, $link, $date を表示 $stmt->execute[json_encode($item)]; } } ?> 補足情報(FW/ツールのバージョンなど) db name hlxclitx_wp1 table name hlxclitx_feed_rss テーブル名 (data) 名前 item

    • ベストアンサー
    • PHP
  • PHP ブログの交信記録

    PHP初心者です。 下記のソースで一行目の$rss = simplexml_load_file( 以降にアドレスを入れて、ブログの更新情報を表示させたいのですが、うまくいきません。なぜでしょうか? <?php $rss = simplexml_load_file("http://d.hatena.ne.jp/xxxx/rss"); foreach ($rss->item as $item) { $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; $date = $dc->date; $date = strtotime($date); $date = date('Y/m/d',$date); echo "<li>$date&nbsp;:&nbsp;<a href=\"$link\">$title</a></li>\n"; } ?>

    • 締切済み
    • PHP
  • PHP5でRSS1.0のネームスペースを記述する方法が分かりません

    PHP5のdomを使ってRSS1.0用のxmlファイルを自動生成しようと 試みているのですが、RSS1.0用にネームスペースを記述しようとしても なかなか理想通りに行きません。 理想としては下記のように表示したいのですが <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja"> 現時点では『xmlns="http://purl.org/rss/1.0/"』が表示出来ません。 <?xml version="1.0" encoding="utf-8" ?> <rdf:RDF  (ここが抜けている)  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:dc="http://purl.org/dc/elements/1.1/"  xmlns:lang="ja"> 書いたソースコードを記載します。 $doc = new DOMDocument('1.0', 'utf-8'); $doc->formatOutput = true; $root = $doc->createElementNS('http://purl.org/rss/1.0/', 'rdf:RDF'); $doc->appendChild($root); $root->setAttributeNS($NAMESPACE ,'xmlns:rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); $root->setAttributeNS($NAMESPACE ,'xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $root->setAttributeNS($NAMESPACE ,'xmlns:lang', 'ja'); setAttributeNSで色々と試してみたのですが、『xmlns=』と言う形に出来ませんでした。 初歩的な質問で大変申し訳ありませんが 皆様のお力添えを頂ければと思います。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • jqueryでRSS内のdc:dateなどの要素の取得方法

    jqueryを使用してRSSのdc:dateやdc:subjectなどの要素を取得するにはどうしたらよいでしょうか。 現在以下のようなコードにしていまして、なんとなく取得したRSSの最初に書いてあるxmlns:dc="http://purl.org/dc/elements/1.1/" となってる部分を利用すればいいのかなと思い立ち、children関数などを使ってみましたが取得できませんでした。 $.ajax({ url: settings.xmllocation, async: true, cache: false, dataType: "xml", success: function(xml) { $(xml).find('item').each(function() { var title = $(this).find('title').text(); var url = $(this).find('link').text(); var date = $(this).children('http://purl.org/dc/elements/1.1/').find('dc:date').text(); var element = $('<div><a href="' + url + '">' + title + '('+date+')</a></div>'); $(container).append(element); elements.push(element); }); });

専門家に質問してみよう