ちょっとしたプログラムを書くなら、開発の手軽さとライブラリの豊富さから考えても使う言語は Perl か PHP あたりのスクリプト言語になるのですが、一方で C や C++ のようなコンパイル言語を全く使わないかというと、実は全然そうでもなくて、とはいってももっぱら読む方が多いのですが、C++ のライブラリとかってあまり使ったことがないので、libxml の C++ ラッパライブラリの libxml++を使ってみました。

ドキュメントを読んで、RSS から title を抜き出すのを作ってみました。以下のような感じ。エラー処理とかは一切ないですが。

#include <iostream>
#include <libxml++/document.h>
#include <libxml++/parsers/domparser.h>
#include <libxml++/nodes/node.h>
#include <libxml++/nodes/element.h>
#include <libxml++/nodes/textnode.h>

using namespace std;
using namespace xmlpp;

int main ( void ){
   DomParser parser;
   parser.parse_memory( string_rss );
   Element *root = parser.get_document()->get_root_node();
   NodeSet items = root->find("//item");

   for( NodeSet::iterator it = items.begin(); 
          it != items.end(); it++ ){
      const NodeSet value = (*it)->find( "title" );
      string title = dynamic_cast< Element *>(value[0])
                       ->get_child_text()->get_content();
      cout << "Title: " + title << endl;
   }

   return 0;
}

get_root_node で ルートノードを取ってきた後は、ルートノードに対して find で欲しいノードを検索して、見つかったノードの集合をイテレータを使って各ノードにアクセスするという形です。 find は XPath を引数にして欲しいノードを取ってこれるので、 思っていたより簡単にできました。タイトルだけを抜き出すなら本当は find("//item/title") でも良いのですが、title の他にも link や pubDate を取ってきたいときは上記のような形になります。

とまあ、これだけでは何ですので、pipes で集約した RSS をポーリングして twitter に更新するプログラムを C++ で作って見ようかななんて思ったり思わなかったりしています。なので次回は curlpp の説明になるかもしれません。

トラックバック(1)

このブログ記事を参照しているブログ一覧: libxml++ を使ってみる

このブログ記事に対するトラックバックURL: http://tsuyuguchi.com/mt/mt-tb.cgi/336

前回は xpath で簡単に RSS からタイトルを抜き出す方法を書いたのですが... 続きを読む

コメントする

最近の画像

料理が少し楽しくなるかもしれないグッズ
江戸糸あやつり人形
江戸糸あやつり人形
おうち、
新橋青空大判将棋
「天体の回転について」読了
「幼年期の終り」読了
「数学ガール/フェルマーの最終定理」読了
ハリー・ポッター 最終巻
もう炊飯器いらないかも

私の本棚

 

自転車走行距離

Flickr Photos

なかのひと

Y!ログール

このサイトについて

あわせて読みたいブログパーツ

2008年11月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

アーカイブ

My Update

  • Loading...

その他