1. Home
  2. Archive
  3. Pear XML_Serializerを使ってみた

Pear XML_Serializerを使ってみた

Pearのパッケージ、XML_Serializerを使ってみました。これはXMLを配列にしたり配列をXMLにしたりできるパッケージです。かなり使いやすくていい感じです。

XMLを配列に変換

XMLデータ

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>Webtech Walker</title>
      <link>http://webtech-walker.com/</link>
      <description>CSS、PHP、Ajaxなどを中心にしたWEB技術の散策記録</description>
      <language>ja</language>
      <copyright>Copyright 2007</copyright>

      <lastBuildDate>Tue, 03 Apr 2007 14:33:17 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      <item>
         <title>年齢と誕生日の変換プログラム[PHP]</title>
         <description>PHPで年齢を引数にして誕生日を返す関数とその逆の関数のサンプルです。結構使いどころが多いんですよね、最近。というわけでメモっておこうと思います。</description>
         <link>http://webtech-walker.com/archive/2007/04/03143317.html</link>

         <guid>http://webtech-walker.com/archive/2007/04/03143317.html</guid>
         <pubDate>Tue, 03 Apr 2007 14:33:17 +0900</pubDate>
      </item>

      <item>
         <title>IEでfloatさせたボックスのmarginが2倍になるバグ</title>
         <description>有名なバグではありますが、久しぶりに遭遇して困ったことになったので書き残しておきます。実際どういう感じで表示されるかというと、下記のような感じです。</description>

         <link>http://webtech-walker.com/archive/2007/03/29171705.html</link>
         <guid>http://webtech-walker.com/archive/2007/03/29171705.html</guid>
         <pubDate>Thu, 29 Mar 2007 17:17:05 +0900</pubDate>
      </item>
      
      <item>
         <title>ページの高さを自動調節するjavascript</title>
         <description>コンテンツの量が少ないページだと、極端にページの高さが小さくなったりすることがあります。cssのheightプロパティで高さをしてしまえばいいのですが、コンテンツの内容が変わる度にcssを編集するのは管理が大変になってしまいます。</description>

         <link>http://webtech-walker.com/archive/2007/03/26231718.html</link>
         <guid>http://webtech-walker.com/archive/2007/03/26231718.html</guid>
         <pubDate>Mon, 26 Mar 2007 23:17:18 +0900</pubDate>
      </item>

   </channel>
</rss>

phpコード

<?php
require_once 'XML/Unserializer.php';
$xml = file_get_contents("http://webtech-walker.com/sample/html/070406.xml");
$Unserializer =& new XML_Unserializer();
$Unserializer->setOption('parseAttributes', TRUE);
$status = $Unserializer->unserialize($xml);
if ($status === true) {
  $res_array = $Unserializer->getUnserializedData();
  print_r($res_array);
}
?>

出力結果

Array
(
    [version] => 2.0
    [channel] => Array
        (
            [title] => Webtech Walker
            [link] => http://webtech-walker.com/
            [description] => CSS、PHP、Ajaxなどを中心にしたWEB技術の散策記録
            [language] => ja
            [copyright] => Copyright 2007
            [lastBuildDate] => Tue, 03 Apr 2007 14:33:17 +0900
            [generator] => http://www.sixapart.com/movabletype/
            [docs] => http://blogs.law.harvard.edu/tech/rss
            [item] => Array
                (
                    [0] => Array
                        (
                            [title] => 年齢と誕生日の変換プログラム[PHP]
                            [description] => PHPで年齢を引数にして誕生日を返す関数とその逆の関数のサンプルです。結構使いどころが多いんですよね、最近。というわけでメモっておこうと思います。
                            [link] => http://webtech-walker.com/archive/2007/04/03143317.html
                            [guid] => http://webtech-walker.com/archive/2007/04/03143317.html
                            [pubDate] => Tue, 03 Apr 2007 14:33:17 +0900
                        )

                    [1] => Array
                        (
                            [title] => IEでfloatさせたボックスのmarginが2倍になるバグ
                            [description] => 有名なバグではありますが、久しぶりに遭遇して困ったことになったので書き残しておきます。実際どういう感じで表示されるかというと、下記のような感じです。
                            [link] => http://webtech-walker.com/archive/2007/03/29171705.html
                            [guid] => http://webtech-walker.com/archive/2007/03/29171705.html
                            [pubDate] => Thu, 29 Mar 2007 17:17:05 +0900
                        )

                    [2] => Array
                        (
                            [title] => ページの高さを自動調節するjavascript
                            [description] => コンテンツの量が少ないページだと、極端にページの高さが小さくなったりすることがあります。cssのheightプロパティで高さをしてしまえばいいのですが、コンテンツの内容が変わる度にcssを編集するのは管理が大変になってしまいます。
                            [link] => http://webtech-walker.com/archive/2007/03/26231718.html
                            [guid] => http://webtech-walker.com/archive/2007/03/26231718.html
                            [pubDate] => Mon, 26 Mar 2007 23:17:18 +0900
                        )

                )

        )

)

かなーり良い感じにパースされてます。

配列をXMLに変換

phpコード

<?php
require_once 'XML/Serializer.php';
$options = array(
  "indent" => " ",
  "linebreak" => "\n",
  "typeHints" => false,
  "addDecl" => true,
  "encoding" => "UTF-8",
  "rootName" => "rdf:RDF",
  "rootAttributes" => array("version" => "0.91"),
  "defaultTagName" => "item",
);
$serializer = new XML_Serializer($options);
$rdf = array(
  "channel" => array(
    array(
      "title" => "年齢と誕生日の変換プログラム[PHP]",
      "description" => "PHPで年齢を引数にして誕生日を返す関数とその逆の関数のサンプルです。結構使いどころが多いんですよね、最近。というわけでメモっておこうと思います。",
      "link" => "http://webtech-walker.com/archive/2007/04/03143317.html",
      "guid" => "http://webtech-walker.com/archive/2007/04/03143317.html",
      "pubDate" => "Tue, 03 Apr 2007 14:33:17 +0900",
    ),
    array(
      "title" => "IEでfloatさせたボックスのmarginが2倍になるバグ",
      "description" => "有名なバグではありますが、久しぶりに遭遇して困ったことになったので書き残しておきます。実際どういう感じで表示されるかというと、下記のような感じです。",
      "link" => "http://webtech-walker.com/archive/2007/03/29171705.html",
      "guid" => "http://webtech-walker.com/archive/2007/03/29171705.html",
      "pubDate" => "Thu, 29 Mar 2007 17:17:05 +0900",
    ),
    array(
      "title" => "ページの高さを自動調節するjavascript",
      "description" => "コンテンツの量が少ないページだと、極端にページの高さが小さくなったりすることがあります。cssのheightプロパティで高さをしてしまえばいいのですが、コンテンツの内容が変わる度にcssを編集するのは管理が大変になってしまいます。",
      "link" => "http://webtech-walker.com/archive/2007/03/26231718.html",
      "guid" => "http://webtech-walker.com/archive/2007/03/26231718.html",
      "pubDate" => "Mon, 26 Mar 2007 23:17:18 +0900",
    )
  )
);
$status = $serializer->serialize($rdf);
if ($status === true) {
  $xml = $serializer->getSerializedData();
  echo "<pre>".htmlspecialchars($xml)."</pre>";
}
?>

出力結果

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF version="0.91">
    <channel>
        <item>
            <title>年齢と誕生日の変換プログラム[PHP]</title>
            <description>PHPで年齢を引数にして誕生日を返す関数とその逆の関数のサンプルです。結構使いどころが多いんですよね、最近。というわけでメモっておこうと思います。</description>
            <link>http://webtech-walker.com/archive/2007/04/03143317.html</link>
            <guid>http://webtech-walker.com/archive/2007/04/03143317.html</guid>
            <pubDate>Tue, 03 Apr 2007 14:33:17 +0900</pubDate>
        </item>
        <item>
            <title>IEでfloatさせたボックスのmarginが2倍になるバグ</title>
            <description>有名なバグではありますが、久しぶりに遭遇して困ったことになったので書き残しておきます。実際どういう感じで表示されるかというと、下記のような感じです。</description>
            <link>http://webtech-walker.com/archive/2007/03/29171705.html</link>
            <guid>http://webtech-walker.com/archive/2007/03/29171705.html</guid>
            <pubDate>Thu, 29 Mar 2007 17:17:05 +0900</pubDate>
        </item>
        <item>
            <title>ページの高さを自動調節するjavascript</title>
            <description>コンテンツの量が少ないページだと、極端にページの高さが小さくなったりすることがあります。cssのheightプロパティで高さをしてしまえばいいのですが、コンテンツの内容が変わる度にcssを編集するのは管理が大変になってしまいます。</description>
            <link>http://webtech-walker.com/archive/2007/03/26231718.html</link>
            <guid>http://webtech-walker.com/archive/2007/03/26231718.html</guid>
            <pubDate>Mon, 26 Mar 2007 23:17:18 +0900</pubDate>
        </item>
    </channel>
</rdf:RDF>

なかなか使いどころが多そうなパッケージです。

参考リンク

トラックバックURL

http://webtech-walker.com/archive/2007/04/06023523.html/trackback

※トラックバックを受け付けてから表示するまでにしばらく時間がかかる場合があります。

コメントフォーム

※HTMLタグは使用できません。