libxml-rubyをinstallしてみたメモ

portable Ubuntuでlibxml-rubyをインストールしたら、凄い躓いたのでメモを。

と、思ったけど長いからまず結論。

結論として

$ sudo apt-get install libxslt1-dev
$ sudo apt-get install libxml2-dev
$ sudo apt-get install ruby1.8-dev
$ sudo gem update --system
$ sudo gem1.8 install libxml-ruby

これで動きまス。

んで、以下作業ログ。

作業ログ

まぁ、一発で入るでしょ!凄いよgem!!

$ sudo gem install libxml-ruby
Bulk updating Gem source index for: http://gems.rubyforge.org
....

オウフ
止まった。。。
仮想環境のメモリが256だとgemがメモリに展開して処理するには足りないみたい。
なので、confを編集して512へ引き上げてから再実行。

$ sudo gem install libxml-ruby
Gem files will remain installed in /var/lib/gems/1.8/gems/libxml-ruby-1.1.3 for inspection.
Results logged to /var/lib/gems/1.8/gems/libxml-ruby-1.1.3/ext/libxml/gem_make.out

まだだめ。
依存関係のライブラリがあるようで、gemからのlibxml-rubyを単体でインストールしようとしてもダメらしいデス。
しょうがないからそっちも探してインストール。
どうやらlibxslt1-devとlibxml2-devという開発用のパッケージをapt-getすればいいみたい。

$ sudo apt-get install libxslt1-dev
$ sudo apt-get install libxml2-dev
$ sudo gem install libxml-ruby
Select which gem to install for your platform (i486-linux)
 1. libxml-ruby 1.1.3 (ruby)
 2. libxml-ruby 1.1.3 (x86-mswin32-60)
 3. libxml-ruby 1.1.2 (x86-mswin32-60)
 4. libxml-ruby 1.1.2 (ruby)
 5. Skip this gem
 6. Cancel installation
> 1
Building native extensions.  This could take a while...
ERROR:  While executing gem ... (Gem::Installer::ExtensionBuildError)
    ERROR: Failed to build gem native extension.
ruby extconf.rb install libxml-ruby
extconf.rb:14:in `require': no such file to load -- mkmf (LoadError)
	from extconf.rb:14

まだだめ。
mkmfがLoadError?
それっぽい記事をみつけたので試してみる

$ sudo gem install why-hpricot --source http://gems.github.com
Building native extensions.  This could take a while...
ERROR:  While executing gem ... (Gem::Installer::ExtensionBuildError)
    ERROR: Failed to build gem native extension.
ruby extconf.rb install why-hpricot --source http://gems.github.com
extconf.rb:1:in `require': no such file to load -- mkmf (LoadError)
	from extconf.rb:1

ボスケテtt
冷静になって調べるとどうもruby-develですよね、なるほど?

$ sudo apt-get install ruby-devel
E: パッケージ ruby-devel が見つかりません

ahi...
えっと?
ruby-develじゃなくて、ruby1.8-dev?
なんか魔法っぽくなってきた(おもに脳みその湯立ち具合が)
今度こそ!
ついでにgemもVerUP!

$ sudo apt-get install ruby1.8-dev
$ sudo gem update --system

gemがw
gem1.8になったw

$ sudo gem1.8 install libxml-ruby

大量にEnclosingを吐きましたがいったっぽい。。。
ドキュメント(RDOC)の問題?かな?カナ?
とりえあえずテストコード。

    xml_orig = LibXML::XML::Parser.new
    xml_orig.string = open( 'ファイルパス/test.xml' ) do |f|
      f.read
    end
    xml = xml_orig.parse
    xml.find( '対象エレメント' ).each do |node|
      p node
    end
    # ついでに保存とかもしちゃう
    xml.save('./output.xml', :indent => true, :encoding => LibXML::XML::Encoding::UTF_8)

問題なく動いた!!
細かい使い方はこちらからで。
http://libxml.rubyforge.org/rdoc/index.html
と、簡単な使い方をまとめてみました!
とりあえず動かしてみる!
という方は参照ください〜。

以上お疲れ様でした〜><

追記(20090731)

エントリ内の記述”XML::”呼び出しにおいて、XML::からはじめてしまうと、以下のようなNameErrorが出てしまい、処理が止まってしまっていました。
NameError (uninitialized constant XML::Document):
(必ずという訳ではなく、条件があるようですが、把握できていません)
よって、エントリ内の全てを以下のように書き換えました。
XML:: -> LibXML::XML::