[Node.js]XMLをJSONに変換して操作する。

RSSフィード(XML)をJSON化して操作してみる。
Node.jsでXMLをJSONに変換して読み込ませてみます。

使用環境は次の通り。
Node.js version v0.8.16
npm request   // httpリクエスト用
npm xml2json // XML->JSON変換用

RSSフィードを取得して、記事タイトルと投稿日時を表示する。
本サイトのRSSフィードをhttpリクエストで取得し、XMLをJSONに変換後、記事のタイトルと投稿日時を列挙させてみます。

RSSフィード(RSS2.0)の一部

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
<channel>
<title>Kimux.Net</title>
<atom:link href="http://kimux.net/?feed=rss2" rel="self" type="application/rss+xml"/>
<link>http://kimux.net</link>
<description>プログラムと趣味と。</description>
<lastBuildDate>Wed, 10 Apr 2013 01:12:51 +0000</lastBuildDate>
<language>ja</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=3.5.1</generator>
<item>
<title>[C#]JSON.Netを使ってWebサービスから取得したJSONを扱うときのメモ。</title>
<link>http://kimux.net/?p=1238</link>
<comments>http://kimux.net/?p=1238#comments</comments>
<pubDate>Mon, 08 Apr 2013 08:32:35 +0000</pubDate>
<dc:creator>m-kimura</dc:creator>
<category>
<![CDATA[ C# ]]>
</category>
<category>
<![CDATA[ プログラム ]]>
</category>
<guid isPermaLink="false">http://kimux.net/?p=1238</guid>
<description>
<![CDATA[
Webサービスが提供するWebAPIからJSON形式で情報をもらう。 今やWebAPIなどの受け渡しに使うのはJSONが当たり前になっています。 そこで、C#でWebAPIなどからJSON形式の文字列を受信した時の扱いに &#8230; <a href="http://kimux.net/?p=1238">続きを読む <span class="meta-nav">&#8594;</span></a>
]]>
</description>
<content:encoded>

getRss.js

var request = require('request');
var url = 'http://kimux.net/?feed=rss2';

request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var json = xml2json(body);

        for (var i in json.rss.channel.item) {
            console.log("title:" + json.rss.channel.item[i].title);
            console.log("date :" + json.rss.channel.item[i].pubDate);
        }
    }
});

function xml2json(body) {
    return JSON.parse(require('xml2json').toJson(body));
}

実行結果

$ node getRss.js
title:[C&amp;#35;]JSON.Netを使ってWebサービスから取得したJSONを扱うときのメモ。
date :Mon, 08 Apr 2013 08:32:35 +0000
title:[雑記]Nortonさんの延長画面がソレっぽく見える件。
date :Tue, 02 Apr 2013 17:04:40 +0000
title:[雑記]上原ひろみちゃんにWONDER AIRPORTに出て欲しかった。
date :Sat, 30 Mar 2013 18:59:47 +0000
title:[上原ひろみ]オフィシャル スマートフォンサイトオープン!
date :Fri, 29 Mar 2013 11:30:36 +0000
title:[雑記]Windows8は普及するのか。
date :Thu, 28 Mar 2013 06:36:38 +0000
title:[上原ひろみ]Solo@BlueNoteToKyo 2日目2nd!
date :Sat, 23 Mar 2013 16:48:40 +0000
title:[Webアプリ]nginxを使ってWebSocketのリバースプロキシを設定する。
date :Fri, 22 Mar 2013 06:21:02 +0000
title:[PC]VMware Player 5でUbuntuを手動インストールする方法。
date :Fri, 22 Mar 2013 04:27:16 +0000
title:[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その3。
date :Thu, 21 Mar 2013 15:30:10 +0000
title:[Webアプリ]WebSocketとGoogleMapsでリアルタイム監視マップを作る。その2。
date :Tue, 19 Mar 2013 15:09:11 +0000

XMLの属性と要素はJSONに変換するとどうなるのか。
属性値と要素が含まれるXMLをxml2jsonでJSONに変換すると、ノードの最後に要素が格納されます。

JSON変換後の一部。

{"rss":
    {
        "version":2,
        "xmlns:content":"http://purl.org/rss/1.0/modules/content/",
        "xmlns:wfw":"http://wellformedweb.org/CommentAPI/",
        "xmlns:dc":"http://purl.org/dc/elements/1.1/",
        "xmlns:atom":"http://www.w3.org/2005/Atom",
        "xmlns:sy":"http://purl.org/rss/1.0/modules/syndication/",
        "xmlns:slash":"http://purl.org/rss/1.0/modules/slash/",
        "channel":
            {"title":"Kimux.Net","atom:link":{"href":"http://kimux.net/?feed=rss2","rel":"self","type":"application/rss+xml"},"link":"http://kimux.net","description":"プログラムと趣味と。","lastBuildDate":"Wed, 10 Apr 2013 01:12:51 +0000","language":"ja","sy:updatePeriod":"hourly","sy:updateFrequency":1,"generator":"http://wordpress.org/?v=3.5.1",
    

XMLパースが面倒だったので、なんかJSONにしたら楽なのかなぁって思ったから、ちょっと試してみたけど、マジ楽だったw

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


This blog is kept spam free by WP-SpamFree.