Мне нужно удалить переводы строк с любых тегов объекта / встраивания. В настоящее время я пытаюсь сделать это с помощью 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 выглядит правильно. Кроме того, после разрешения этой части мне нужно убедиться, что фактический узел object в объекте doc сохранен с обновленными значениями.
Любая помощь наиболее ценится. Спасибо.
Понял!
require 'nokogiri' s = <<ENDHTML <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> ENDHTML doc = Nokogiri::HTML(s) doc.css('object,embed').each{ |e| e.inner_html = e.inner_html.gsub(/\n/,'') } puts doc.serialize( save_with: 0 ) #=> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> #=> <html><body><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></body></html>
inner_html
inner_html.gsub!
inner_html = inner_html.gsub
serialize
:save_with => 0