用另一个标签替换特定标签

时间:2013-11-11 14:22:43

标签: html ruby xpath css-selectors nokogiri

所以我有这个html(位于某个XML文件中)

<span style=" font-style: italic;">Nature, </span>

我的期望的结果是使用Ruby,Nokogiri或css-selectors替换标记

<i>Nature, </i>

我尝试了以下内容:

所以我读了Xml并获取了内容

page_references = doc.xpath("/wcm:root/wcm:element[@name='Citations']").inner_text

在这里,我尝试在内容中查找标签并替换它

page_data.push (page_references.to_s.gsub!(/<span style=" font-style: italic;">/,'<i>'))

这不会取代结束标记。

是否有任何人对如何实现所需结果有任何建议?

2 个答案:

答案 0 :(得分:0)

require "nokogiri"
doc = Nokogiri::HTML.fragment('<span style=" font-style: italic;">Nature, </span>')

doc.css('span[style=" font-style: italic;"]')
.each{|span| span.replace("<i>#{span.content}</i>")}

doc.to_s # => "<i>Nature, </i>"

答案 1 :(得分:0)

我将如何做:

require 'nokogiri'

doc = Nokogiri::HTML.parse <<-eot
<span style=" font-style: italic;">Nature, </span>
eot

node = doc.at_css('span[style=" font-style: italic;"]')
node.replace("<i> #{node.text} </i>")

puts doc

<强>输出

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org
   /TR/REC-html40/loose.dtd">
<html>
   <body><i> Nature,  </i></body>
</html>