お世話になります。

データベースよりxmlを生成し、自分のHPに1ページに埋め込みたいと思っています。

いろいろなサイトを参考に、MagpieRSSを使用して表示させたいのですが、コードのサンプルに記載されている他サイトのRSS・xmlは表示できるのですが、ローカルのxmlは下記のエラーが出てしまい表示できません。
Warning: MagpieRSS: Failed to parse RSS file. (not well-formed (invalid token) at line 9, column 21) in /aaa/rss/rss_fetch.inc on line 238
変更した部分は、表示するxmlのURLのみです。

使用しているphpのバージョンは4.34、MagpieRSSのバージョンは0.72です。

問題のrss.phpのソース↓
<?php
require_once 'rss_fetch.inc';
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
$url = 'http://www.aaa.com/rss.xml';
$rss = fetch_rss($url);
if ($rss && !$rss->ERROR) {
drawRSS($rss);
}else{
echo "取得できませんでした。";
}
function drawRSS($rss){
$items = array_slice($rss->items, 0, 10);
echo "<ul>\n";
foreach ($items as $item ) {
$title = $item[title];
$title = mb_convert_encoding($title, "UTF-8", "auto");
$url = $item[link];
$description = $item[description];
$description = mb_convert_encoding($description, "UTF-8", "auto");
echo "<li><a href=\"$url\">$title</a></li>\n$description";
}
echo "</ul>\n";
}
?>


何か、対処方法をご存知の方教えてください。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>9行目21文字目は漢字でした


だとしたら、思いつくとしたら「文字コード」なんだけどな。
まさかXML宣言のencodingがないとか間違っている(ファイルがShift_JISだったとか。アルファベットは大半の文字コードでASCIIコードが基準になって共通なため、問題が発生しにくい)ってオチはないですよねぇ?

この回答への補足

ですよね。。
私もそうだと思って試行錯誤・・・・・

表示のテストをしているxmlは↓(以下test.xml)

<?xml version="1.0" encoding="EUC-JP"?>
<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/">
<channel rdf:about="http://www.test.daion.ac.jp/">
<title>Web</title>
<link>http://www.aaa.com</link>
<description>test</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.aaa.com/test.php?eid=209"/>
<rdf:li rdf:resource="http://www.aaa.com/test.php?eid=192"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.aaa.com/test.php?eid=209">
<dc:date>2007-03-11T15:00:00+01:00</dc:date>
<dc:source>18:30</dc:source>
<title>aaa</title>
<link>http://www.aaa.com/test.php?eid=209</link>
<description>aaa</description>
</item>
<item rdf:about="http://www.aaa.com/test.php?eid=192">
<dc:date>2007-02-24T15:00:00+01:00</dc:date>
<dc:source>14:00</dc:source>
<title>bbb</title>
<link>http://www.aaa.com/test.php?eid=192</link>
<description>bbb</description>
</item>
</rdf:RDF>

これは表示OKです。

ただ、phpでxmlを生成しているんですが、phpで新しく生成したファイル(以下new.xml)は<description>の部分でエラーが出ます。
xmlの形はまったく同じで、new.xmlの<item>部分だけをコピーして
test.xmlの<item>部分に貼り付けすると、エラーも出ず漢字・かなも表示出来ました。

一度、違う文字コードで、new.xmlを生成してみます!!

ありがとうございます!!

補足日時:2007/02/17 11:55
    • good
    • 0
この回答へのお礼

xmlの生成の際に、title・descriptionの部分をmb_convert_encodingしてみました!!

無事に表示することが出来ました。

ありがとうございました。

お礼日時:2007/02/17 14:29

PHP未経験者です。



エラーを見る限りでは
>(not well-formed (invalid token) at line 9, column 21)
となっていますが

そのローカルのXMLファイルは整形式なの?コレ見るとそういうエラー出てるみたいだけど。(9行目、21文字目におかしい文字があるらしい)
    • good
    • 0
この回答へのお礼

おはようございます。

9行目21文字目は漢字でした。
ためしに、xmlの中のテキスト部分をすべて英数字にしてみると
ちゃんと表示が出来ました。

日本語の表示の部分みたいですが・・・・なかなか良い解決方法が見つかりません。

回答ありがとうございました。

お礼日時:2007/02/17 09:41

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QRSS1.0のitemとlinkの関係

さきほどから、自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
Headline-Editor Liteというのソフトを使って作ってみました。
http://www.infomaker.jp/editorlite/
更新情報としては、その内容を載せるつもりなのですが、
アドレスはトップページで固定しようと考えていました。
このソフトで、RSSファイルを作成すると、
itemタグのrdf:about属性に、「指定アドレス+#he日付」という値をいれ、
itemタグ内のlinkタグに、「指定アドレス」を入れて、RSSファイルを生成します。
こうして生成したRSSファイルをサーバーにあげて、
Headline-Readerで確認すると、当たり前ですが、正常に取得できます。
http://www.infomaker.jp/headline/

ところが、goo RSSリーダーでは、最新の1itemしか取得できません。
http://reader.goo.ne.jp/

RSS1.0の仕様によると、itemタグのrdf:about属性の値は、一意でないといけないようです。
http://www.net.intap.or.jp/INTAP/s-web/data/TR/1-2.html#s5.5
しかし、その値は、linkタグ内の値と一致していなくてもよいようです。
(文章を読むと、一致させることが推奨されているようですが)

RSSファイルをいじって調べてみたところ、
goo RSSリーダーでは、itemタグのrdf:about属性の値に関わらず、
linkタグ内の値が同一のものは、同一のitemとして扱う仕様になっているようです。

このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
やはりgoo RSSリーダーの独自仕様なのでしょうか?
ご存知の方がいらっしゃいましたら、教えてくださいm(_ _)m

さきほどから、自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
Headline-Editor Liteというのソフトを使って作ってみました。
http://www.infomaker.jp/editorlite/
更新情報としては、その内容を載せるつもりなのですが、
アドレスはトップページで固定しようと考えていました。
このソフトで、RSSファイルを作成すると、
itemタグのrdf:about属性に、「指定アドレス+#he日付」という値をいれ、
itemタグ内のlinkタグに、「指定アドレス」を入れて、RSSファイルを生成しま...続きを読む

Aベストアンサー

> このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
RSS 1.0の仕様は、データのフォーマットの仕様であって、データの管理方法や、データの表示方法を定めた仕様ではありません。
ですので、goo RSSリーダーが1itemしか表示しないという動作とRSS 1.0の仕様は無関係です。
また、ユーザの利便性を考えても、goo RSSリーダーの動作に何か問題があるとは思えません。むしろ、これはこれで使いやすい、と考えることもできます。

例えば、こんな考えです。
linkが示すURLが同じでしたら、それが示すコンテンツも同じと考えます。
同じコンテンツを示すitemが複数あるということは、どれか一つのitemが最新の正しい情報を示し、残りのitemは古い(そして既に正しくない)情報を示している、と考えたとします。
そうなると、最新と思われる情報を1つだけ表示し、残りの情報は表示しない、という動作は自然なように思えます。

というわけで、goo RSSリーダーに問題があるとは思えません。
今回の問題の根本はここです。
> 自分のサイトの更新情報を載せるべく、RSSファイルを作ろうと考えていました。
RSSは、サイトの更新情報を配布するための仕様ではありません。サイトの要約を配布するためのフォーマットです。
つまり本来の目的外のことに使用しようとしているわけです。無理がでるわけです。

サイトの更新情報ではなく、サイトの要約をHeadline-Editor LiteでRSSファイルとして作成し、それを配布することをお勧めします。
サイトを変更したときに、RSSファイルも変更後の内容に合わせて変えましょう。
大抵のRSSリーダーは、RSSファイルの変化を分かりやすくユーザに提示するようになっていますので、結果的にサイトが更新されたことがユーザに伝わるはずです。

> このgoo RSSリーダーの仕様は、RSS1.0の仕様に基づいたものとは思えませんが、
RSS 1.0の仕様は、データのフォーマットの仕様であって、データの管理方法や、データの表示方法を定めた仕様ではありません。
ですので、goo RSSリーダーが1itemしか表示しないという動作とRSS 1.0の仕様は無関係です。
また、ユーザの利便性を考えても、goo RSSリーダーの動作に何か問題があるとは思えません。むしろ、これはこれで使いやすい、と考えることもできます。

例えば、こんな考えです。
linkが示すURLが同じでし...続きを読む

QVB2005 で encoding="Shift_JIS"や"EUC-JP"のXMLファイルを保存する方法

VB2005, XML の初心者です。

VB2005で encoding="Shift_JIS" や "EUC-JP" のXMLデータをファイルに保存するにはどうすれば良いのでしょうか。
encoding="UTF-8"であれば、下記で保存できますが、="Shift_JIS" や "EUC-JP" になると保存でエラーになってしまいます。

下記ソースでは、strXMLには正しくXMLが入っていますが、saveするとエラーになり、ファイルの中身を確認すると、日本語の箇所で切れていました。

Public Client As TcpClient

Dim stream As NetworkStream
stream = Client.GetStream()

Dim Data(10000) As Byte
Dim len As Int16 = stream.Read(Data, 0, Data.Length)
strXML = System.Text.Encoding.UTF8.GetString(Data, 0, len)

MsxmlDoc = New MSXML2.DOMDocument
Msxmldoc.Loadxml(strXML)
MsxmlDoc.save ( "C:\XML.xml")

文字コードについても初心者ですので、ヒントになるようなことでも教えていただければ幸いです。
よろしくお願い致します。

VB2005, XML の初心者です。

VB2005で encoding="Shift_JIS" や "EUC-JP" のXMLデータをファイルに保存するにはどうすれば良いのでしょうか。
encoding="UTF-8"であれば、下記で保存できますが、="Shift_JIS" や "EUC-JP" になると保存でエラーになってしまいます。

下記ソースでは、strXMLには正しくXMLが入っていますが、saveするとエラーになり、ファイルの中身を確認すると、日本語の箇所で切れていました。

Public Client As TcpClient

Dim stream As NetworkSt...続きを読む

Aベストアンサー

返事が遅くなりました。
すみません。
MSXML2.DOMDocumentでの文字コード指定による保存ですが、OKWave内でJScript.NETを用いた回答が過去にありましたので、参考URLをご覧になってみてください。
FileStreamを使用することで実現できそうです。

>また、初歩的なことかもしれませんが、XMLファイルの宣言文にある文字コード(encoding=)はどのように読めば良いのでしょうか。
読み込んで何をしたいのでしょうか?
System.Xml.XmlDocumentのLoadXMLメソッドを使用すれば、あまり気にしなくても良いと思うのですが...

参考URL:http://okwave.jp/qa1772802.html

QXSLTを使用したXML->XML変換で...

XSLTを使用したXMLからXMLへの変換で、やり方が分からないのでどなたかお教え願います。

以下にXMLを記述します。

----[入力側]-----
<INPUT>
<IN1>
<old>100</old>
<new>100</new>
</IN1>
<IN2>
<IN21>
<old>200</old>
<new>200</new>
</IN21>
<IN22>
<old>300</old>
<new>300</new>
</IN22>
</IN2>
</INPUT>

----[出力側]-----
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>
<OUT12>
<OUT121>
<old>200</old>
<new>200</new>
</OUT121>
<OUT122>
<old>300</old>
<new>300</new>
</OUT122>
</OUT12>
</OUT1>
</OUTPUT>


【質問内容】
 集団項目でないタグ(入力側のIN1およびIN2)を集団項目として出力したい

XSLTを使用したXMLからXMLへの変換で、やり方が分からないのでどなたかお教え願います。

以下にXMLを記述します。

----[入力側]-----
<INPUT>
<IN1>
<old>100</old>
<new>100</new>
</IN1>
<IN2>
<IN21>
<old>200</old>
<new>200</new>
</IN21>
<IN22>
<old>300</old>
<new>300</new>
</IN22>
</IN2>
</INPUT>

----[出力側]-----
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>...続きを読む

Aベストアンサー

> 入力側のIN1,IN2が複数回繰り返された場合、
> 出力側もOUT1が複数回繰り返されるって感じです。

IN1とIN2が必ず1対1に対応するという条件でいいなら(複数の組が存在しても可)これでいけるでしょう。



IN1およびIN2以下の構造はオリジナルのまま出力されます。

<xsl:template match="INPUT">
 <OUTPUT>
  <xsl:apply-templates />
 </OUTPUT>
</xsl:template>
<xsl:template match="IN1">
 <xsl:text disable-output-escaping="yes">&lt;OUT&gt;</xsl:text>
  <xsl:copy-of select="." />
</xsl:template>
<xsl:template match="IN2">
 <xsl:copy-of select="." />
 <xsl:text disable-output-escaping="yes">&lt;/OUT&gt;</xsl:text>
</xsl:template>

> 入力側のIN1,IN2が複数回繰り返された場合、
> 出力側もOUT1が複数回繰り返されるって感じです。

IN1とIN2が必ず1対1に対応するという条件でいいなら(複数の組が存在しても可)これでいけるでしょう。



IN1およびIN2以下の構造はオリジナルのまま出力されます。

<xsl:template match="INPUT">
 <OUTPUT>
  <xsl:apply-templates />
 </OUTPUT>
</xsl:template>
<xsl:template match="IN1">
 <xsl:text disable-output-escaping="yes">&lt;OUT&gt;</xsl:text>
  <xsl:copy-of sele...続きを読む

Q構文に問題がないRSSフィードを作ったのにRSSリーダに登録できません。

feedanalyzerでチェックした分には特に問題がないのですが、livedoorリーダで登録できませんでした。
拡張子がphpなのは、アクセスをカウントするためです。phpのソースは以下になります。
<?php
//カウントする
require_once("./lib/Init_class.php");
$init_obj = new Init_class();
$accesstxt = "./data/access.txt";
$init_obj->access_add($accesstxt);
readfile("rss1.rdf");
?>
どなたか原因がわかる方がおられましたら教えてください。

xmlファイルは以下のURLになります。
http://www.ecstyle.jp/rss/make_rss/rss1.php

どうぞよろしくお願いします。

Aベストアンサー

No.1のhimajin3500さんが指摘されている問題(<dc:date>の構文エラー。恐らく時分秒の時が0-23の間でないとならない/URLが不正 http:の後のスラッシュは2つです)に加えて、HTTPレスポンスヘッダのContent-Typeで text/htmlを返しているのがまずいです。
このContent-Typeを返すとRSSだと解釈できないRSSリーダが多数存在します。Content-Typeには、現状では application/xml を返してください。

具体的には、PHP内の適当な場所に以下の一文を加えます。

header("Content-Type: application/xml");

QRSSフィードのないWebページにRSSの機能を提供するサービスFeedbeaterの使い方

RSSフィードのないWebページにRSSの機能を提供するサービス
Feedbeaterの使い方をご存じの方おられませんか。

使用したいのですが、英語がまったくなので、わかりません。
検索しても翻訳や使用方法を掲載しているサイトがありません。

どなたかご存知な方、もしくは使用方法が載っているサイトをご存じな方おられましたら教えて下さい。

宜しくお願い致します。

Aベストアンサー

検索したらけっこうみつかりましたよ。

単に、
<script src="http://www.feedbeater.com/widgets/add.min.js"></script>
を組み込むだけみたいですけど...
カストマイズは
http://www.diffbot.com/apps/feedbeater/
のサービスでできるようだ

参考URL:http://web-marketing.zako.org/web-tools/create-rss-feed-from-any-website.html


おすすめ情報