随着角度来说,Hpricot里面,你可以这样做:使用引入nokogiri对文本节点交换一个DocumentFragment的
> doc = Hpricot("a")
=> #<Hpricot::Doc "a">
> doc.children.first.swap('b')
=> ["b"]
> doc.to_s
=> "b"
但是,如果你尝试用引入nokogiri同样的事情,你会得到一个错误:
> doc = Nokogiri::HTML::DocumentFragment.parse('a')
=> #<Nokogiri::HTML::DocumentFragment:0x825bb88c name="#document-fragment" children=[#<Nokogiri::XML::Text:0x825bb580 "a">]>
> doc.children.first.swap('b')
RuntimeError: error parsing fragment (1)
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:509:in `in_context'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:509:in `parse'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/html/document_fragment.rb:22:in `initialize'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:485:in `new'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:485:in `fragment'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:885:in `coerce'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:382:in `replace'
from /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/lib/nokogiri/xml/node.rb:407:in `swap'
from (irb):63
如何我可以在Nokogiri的文本节点上使用swap
吗?
编辑:请注意,这是不是与参数swap
一个问题,它是一个与接收器
例如一个问题:
> doc = Nokogiri::HTML::DocumentFragment.parse('<a>b</a>')
=> #<Nokogiri::HTML::DocumentFragment:0x825bb508 name="#document-fragment" children=[#<Nokogiri::XML::Element:0x825bb1fc name="a" children=[#<Nokogiri::XML::Text:0x825bab6c "b">]>]>
> doc.at("a").swap('x')
=> #<Nokogiri::XML::Element:0x825bb1fc name="a" children=[#<Nokogiri::XML::Text:0x825bab6c "b">]>
> doc.to_s
=> "x"
鉴于几乎你的问题100个人捐出自己的空闲时间帮你还没有从你接受标志增光,原谅我,如果我迫不及待地想看到回答如何我来回应在花时间回答这个问题之前,你的另一个问题就变成了现实。 – Phrogz 2011-01-30 05:17:16
我的坏狗;我没有看到你的答案! – 2011-01-30 05:21:19