【发布时间】:2011-06-04 10:16:03
【问题描述】:
我需要从任何对象/嵌入标签中删除换行符。我目前正在尝试通过执行以下操作来使用 Nokogiri:
s = "<div>
<object height='450' width='600'>
<param name='allowfullscreen' value='true'>
<param name='allowscriptaccess' value='always'>
<param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id=3317924&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1'>
<embed src='http://vimeo.com/moogaloop.swf?clip_id=3317924&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1' type='application/x-shockwave-flash' allowfullscreen='true' allowscriptaccess='always' height='450' width='600'>
</embed>
</object>
</div>"
doc = Nokogiri::HTML(s)
doc.css('object').each { |o| o.inner_html.gsub!(/\n/, ""); puts o.inner_html }
请注意,该示例仅适用于对象标签。
在块的末尾打印 o.inner_html 表明没有发生替换,即使 gsub 文本看起来是正确的。此外,一旦解决了该部分,我需要确保 doc 对象中的实际 object 节点与更新的值一起保存。
非常感谢任何帮助。谢谢。
【问题讨论】:
-
a) 我会通过
doc.xpath('//object/text()').each{ |t| t.remove }删除空格; b) 这样做没有帮助; c) 即使您删除源中参数之间的空格,您也会看到它出现在输出中。问题在于序列化,而不是文档表示。 -
doc.xpath('//object/text()') 在此示例中不返回任何内容。
-
"doc.xpath('//object/text()') 在此示例中不返回任何内容"。实际上确实如此。它返回
[#<Nokogiri::XML::Text:0x80899cb8 "\n">] -
一定是打错了什么,确实如此。
-
不过还是没有回答我上面的问题。
标签: ruby-on-rails ruby replace newline nokogiri