西山和広です。

At Thu, 4 Mar 2010 16:17:30 +0900,
Takayuki Suzuki wrote:
> 
> 既に作成済みのHTMLドキュメントを erb に食わせるため
> のテンプレートに変換したくて Nokogiri をつかってみた
> のですが、思うようにいきません。
> 
> <input type=text name=namae size=20>
> 
> 
> 
> <%= textField('namae', {:size=>20}) %>
> 
> に置き換えて出力したいのですが < > をエスケープせずに
> 出力する方法はないでしょうか?
> 
> test.rb

test.rb を元に試してみたところ、HTML なら CDATA で
そのまま出力できるようです。

こういう使い方をして良いものなのかどうかはわからないので、
将来使えなくなる可能性があるかもしれませんが。
Text と CDATA で new の引数の順番が違うのでそこも注意が
必要そうです。

% cat ruby-list-46890.rb
require 'rubygems'
require 'nokogiri'

doc = Nokogiri::HTML(<<EOM)
<form>
Name : <input type=text name=namae size=20>
</form>
EOM

node = doc.xpath('/html/body/form/input')[0]
str = "<%= textField('namae', {:size=>20}) %>"
new = Nokogiri::XML::CDATA::new(doc, str)
node.replace(new)
puts doc.xpath('/html/body/form')[0].to_html
puts doc.xpath('/html/body/form')[0].to_xml
% ruby ruby-list-46890.rb
<form>
Name : <%= textField('namae', {:size=>20}) %>
</form>
<form>
Name : <![CDATA[<%= textField('namae', {:size=>20}) %>]]></form>
% gem list nokogiri

*** LOCAL GEMS ***

nokogiri (1.4.1)
%

-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)