[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 メーリングリストの案内