[PHP-users 23819] PHP PEAR::XML_SerializerでRSS1.0を生成する方法に関して
Chiemi Akasaka
g031z002 @ edu.soft.iwate-pu.ac.jp
2004年 12月 6日 (月) 20:20:53 JST
赤坂です。
PEARのXML_Serializerを使って、RSS1.0を生成するPHPコードを書いています。
パッケージのサンプルコードやその他の情報を参考にコードを書いたのですが、
正しいRSS1.0の構文にありつけません。
生成したいRSS1.0の構文は以下の通りです。(sample01)
***********************************[
sample01 ]*********************************************
<?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/"
xml:lang="ja">
<channel rdf:about="http://members.at.infoseek.co.jp/XXXX.rdf">
<title>*** TITLE ***</title>
<link>http://members.at.infoseek.co.jp/XXXX.html</link>
<description>abcdefghijklmn...</description>
<items>
<rdf:Seq>
<rdf:li
rdf:resource="http://members.at.infoseek.co.jp/XXXX.html#jump1"/>
<rdf:li
rdf:resource="http://members.at.infoseek.co.jp/XXXX.html#jump2"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://members.at.infoseek.co.jp/XXXX.html#jump1">
<title>Item Title1</title>
<link>http://members.at.infoseek.co.jp/XXXX.html#jump1</link>
<description>item1 description...</description>
<dc:creator>Chiemi Akasaka</dc:creator>
<dc:date>2004-09-28</dc:date>
<dc:subject>abc</dc:subject>
</item>
<item rdf:about="http://members.at.infoseek.co.jp/XXXX.html#jump2">
<title>Item Title2</title>
<link>http://members.at.infoseek.co.jp/XXXX.html#jump2</link>
<description>item2 description...</description>
<dc:creator>Chiemi Akasaka</dc:creator>
<dc:date>2004-09-25</dc:date>
<dc:subject>abc</dc:subject>
</item>
</rdf:RDF>
****************************************************************************
*****************
このような構文を目指して、自分なりに作成したコードは以下のものです。
(sample02)
****************************************************************************
*****************
<?php
error_reporting(E_ALL ^ E_NOTICE);
require_once 'XML/Serializer.php';
$options = array(
"indent" => " ",
"linebreak" => "\n",
"typeHints" => false,
"addDecl" => true,
"encoding" => "UTF-8",
"rootName" => "rdf:RDF",
"rootAttributes" => array("xmlns" => "http://purl.org/rss/1.0/",
"xmlns:rdf" => "http://www.e3.org/1999/02/22-rdf-syntax-ns#",
"xmlns:dc" => "http://purl.org/dc/elements/1.1/",
"xml:lang" => "ja"),
"defaultTagName" => "item",
"attributesArray" => "_attributes"
);
$item1 = array( "titile" => "Item Title1",
"link" => "http://members.at.infoseek.co.jp/XXXX.html#jump1",
"description" => "item1 description...",
"dc:creator" => "Chiemi Akasaka",
"dc:date" => "2004-09-28",
"dc:subject" => "abc",
"_attributes" => array("rdf:about" =>
"http://members.at.infoseek.co.jp/XXXX.html#jump1")
);
$item2 = array( "titile" => "Item Title2",
"link" => "http://members.at.infoseek.co.jp/XXXX.html#jump2",
"description" => "item2 description...",
"dc:creator" => "Chiemi Akasaka",
"dc:date" => "2004-09-25",
"dc:subject" => "abc",
"_attributes" => array( "rdf:about" =>
"http://members.at.infoseek.co.jp/XXXX.html#jump2")
);
$resource[] = array( "rdf:li" =>
array( "_attributes" =>
array( "rdf:resource" =>
"http://members.at.infoseek.co.jp/XXXX.html#jump1")
)
);
$resource[] = array( "rdf:li" =>
array( "_attributes" =>
array( "rdf:resource" =>
"http://members.at.infoseek.co.jp/XXXX.html#jump2")
)
);
$data["channel"] = array( "title" => "*** TITLE ***",
"link" => "http://members.at.infoseek.co.jp/XXXX.html",
"description" => "abcdefghijklmn..."
"_attributes" => array("rdf:about" =>
"http://members.at.infoseek.co.jp/XXXX.rdf"),
"items" => array( "rdf:Seq" => $resource )
);
$data[] = $item1;
$data[] = $item2;
$Serializer = &new XML_Serializer($options);
$status = $Serializer->serialize($data);
if (PEAR::isError($status)){
die($status->getMessage());
}
header('Content-type: text/xml');
echo $Serializer->getSerializedData();
?>
****************************************************************************
******************
上記のようなコードでは以下のように生成されてしまいます。
****************************************************************************
******************
<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
xml:lang="ja"
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.e3.org/1999/02/22-rdf-syntax-ns#">
<channel rdf:about="http://members.at.infoseek.co.jp/XXXX.rdf">
<title>*** TITLE ***</title>
<link>http://members.at.infoseek.co.jp/XXXX.html</link>
<description>abcdefghijklmn...</description>
<items>
<rdf:Seq>
<item>
<rdf:li
rdf:resource="http://members.at.infoseek.co.jp/XXXX.html#jump1" />
</item>
<item>
<rdf:li rdf:resource="http://members.at.infoseek.co.jp/XXXX.html#jump2"
/>
</item>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://members.at.infoseek.co.jp/XXXX.html#jump1">
<titile>Item Title1</titile>
<link>http://members.at.infoseek.co.jp/XXXXX.html#jump1</link>
<description>item1 description...</description>
<dc:creator>Chiemi Akasaka</dc:creator>
<dc:date>2004-09-28</dc:date>
<dc:subject>abc</dc:subject>
</item>
<item rdf:about="http://members.at.infoseek.co.jp/XXXX.html#jump2">
<titile>Item Title2</titile>
<link>http://members.at.infoseek.co.jp/XXXX.html#jump2</link>
<description>item2 description...</description>
<dc:creator>Chiemi Akasaka</dc:creator>
<dc:date>2004-09-25</dc:date>
<dc:subject>abc</dc:subject>
</item>
</rdf:RDF>
**********************************************************************おう
*********************
上記のRSSは間違ったRSS構文であり、以下の⇒の部分がよろしくありません。
************************************************************************
* <Items>
*
* <rdf:Seq>
*
* ⇒ <item>
*
* <rdf:li rdf:resource="http://abcd/xxx.html"/> *
* ⇒ </item>
*
* </rdf:Seq>
*
* </Items>
*
************************************************************************
おそらく "defaultTagName" => "item" のオプションの使い方が悪いと思うのです
が、
様々な方法をとっても、思うように生成できません。
RSS1.0の正しい構文を吐き出すPHPコードが分かるかた、どうぞ返信よろしくお願い
します。
--------------------------------------------------
赤坂智恵美
PHP-users メーリングリストの案内