[#45189] 『初めてのRuby』出版記念トークイベントのお知らせ — KOU Keiko <keiko@...>
オライリー・ジャパンの高と申します。
2 messages
2008/07/04
[#45199] Windows版のirbでカットアンドペーストはできますか? — take_tk <ggb03124@...>
たけ(tk)です。
5 messages
2008/07/06
[#45214] Debian4 GNU/LinuxとRubyGemsについて。 — hrkt0115311 <hrkt0115311@...>
Rubyistの皆さん、おはようございます。
5 messages
2008/07/10
[#45227] [ANN/ADV] RubyKaigi2009 会場候補地を探してます — "Shintaro KAKUTANI" <shintaro@...>
かくたにです。
5 messages
2008/07/16
[#45234] Matrix のサブクラスのインスタンス生成 — "M.Uemura" <mitsuhideuemura@...>
うえむら@文京区と申します。
5 messages
2008/07/17
[#45240] ruby-1.8.5-p231にアップデートしたら"original_filename"が取れなくなりました — hayashi <36hayashi@...>
林と申します。
9 messages
2008/07/18
[#45244] Re: ruby-1.8.5-p231にアップデートしたら"original_filename"が取れなくなりました
— Nobuyoshi Nakada <nobu@...>
2008/07/19
なかだです。
[#45246] Re: ruby-1.8.5-p231にアップデートしたら"original_filename"が取れなくなりました
— とみたまさひろ <tommy@...>
2008/07/20
とみたです。
[#45241] Ruby版Camelliaライブラリ — Satoru Kanno <kanno-s@...>
Ruby-listの皆さま
5 messages
2008/07/18
[#45259] nkf -j problem? — OHARA Shigeki <os@...>
大原です。
7 messages
2008/07/25
[#45267] [ANN] Ruby 1.9.0-3リリース — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
16 messages
2008/07/25
[#45268] Re: [ANN] Ruby 1.9.0-3リリース
— take_tk <ggb03124@...>
2008/07/25
たけ(tk)です。
[#45289] Fwd: [ReferenceManualRenewalProject - Bug #379] (Open) String#intern は空文字列に使えない(Ruby 1.8) -- Ruby 1.9 は違うのでは — Kouya <kouyataifu4@...>
こんばんは、kouyaです。
3 messages
2008/07/31
[ruby-list:45288] Re: Hpricotでの疑問点(inner_html)
From:
rubikitch@...
Date:
2008-07-31 09:22:10 UTC
List:
ruby-list #45288
From: Maehara Masahide(前原正英) <maehrm@miyazaki-c.ed.jp>
Subject: [ruby-list:45287] Hpricotでの疑問点(inner_html)
Date: Thu, 31 Jul 2008 15:39:29 +0900
るびきちです。
> 以下を実行した際,「Ruby home page」と出力されることを期待していたので
> すが,画面には,「ruby home page」と表示されます。
結論から言うと Hpricot::Elem#inner_html= を使えばうまくいきます。
putsすると修正が反映されます。
require 'rubygems'
require 'hpricot'
doc = Hpricot('<a href="http://ruby-lang.org/">ruby home page</a>')
(doc/:a).each do |ele|
ele # => {elem <a href="http://ruby-lang.org/"> "ruby home page" </a>}
ele.inner_html = ele.inner_html.gsub(/ruby/, "Ruby")
ele.class # => Hpricot::Elem
ele.inner_html # => "Ruby home page"
end
puts doc
# >> <a href="http://ruby-lang.org/">Ruby home page</a>
ちなみに、Hpricot::Doc#/は該当するツリーすべてを取得しますが、Hpricot::Doc#atは
最初に見付かったもののみを取得します。
> 何故だろうと思い、hpricot-0.6/lib/hpricot/elements.rbを見てみたところ,
> inner_htmlメソッドがあり,そこでは,
> map { |x| x.inner_html }.join
> というような配列に対する処理をやっているので,gsub!できないんだなと理
> 解したつもりなのですが,このinner_htmlは,Elements#inner_htmlです。
実は Hpricot::Elem#inner_html の実体は Hpricot::Traverse#inner_html です。
hpricot/modules.rb よりこんな定義になっているからです。
module Hpricot
module Traverse end
module Container::Trav; include Traverse end
class Elem; module Trav; include Container::Trav end; include Trav end
end
# それにしてもまわりっくどい。いったいなんの意図が…
で、hpricot/traverse.rbを見てみると、こうなっています。
module Hpricot
module Traverse
def html(inner = nil, &blk)
if inner or blk
altered!
case inner
when Array
self.children = inner
else
self.children = Hpricot.make(inner, &blk)
end
reparent self.children
else
# ここを通る
if respond_to? :children
children.map { |x| x.output("") }.join
end
end
end
alias_method :inner_html, :html
alias_method :innerHTML, :inner_html
end
end
Hpricot::Elemは children メソッド(アクセサ)を持っているのでmap/joinしています。
だから、gsub!ができないのです。
おそらく inner_html をアクセサと勘違いしたのでしょう。
> 以下のように,eleは,Hpricot::Elemなので,ele.inner_htmlが実行できるの
> が不思議な感じがします。
> p ele.class #=> Hpricot::Elem
> p ele.inner_html
そうですか? Hpricot::Elem はHTMLの要素(タグと内容)なのでinner_htmlが実行できても
不思議じゃないです。
--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/