【问题标题】:Replace a specific tag with another tag用另一个标签替换特定标签
【发布时间】:2013-11-23 09:22:23
【问题描述】:

所以我有这个 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>'))

这不会替换结束标记。

有人对我如何实现想要的结果有任何建议吗?

【问题讨论】:

    标签: html ruby xpath css-selectors nokogiri


    【解决方案1】:
    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>"
    

    【讨论】:

    • 谢谢sawa非常优雅
    【解决方案2】:

    我会这样做:

    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>
    

    【讨论】:

    猜你喜欢
    • 2015-06-24
    • 2011-10-28
    • 1970-01-01
    • 2015-09-19
    • 2013-04-23
    • 2012-03-13
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多