【问题标题】:Editing Text in a Nokogiri Element or Using Regex在 Nokogiri 元素中编辑文本或使用正则表达式
【发布时间】:2011-01-06 23:44:31
【问题描述】:

有没有办法编辑 nokogiri 元素的文本?我有一个包含列表元素 (<li>) 的 nokogiri 元素,我想从文本中删除一些字符,同时保留 <li> html。具体来说,我想删除文本中的前导“:”字符(如果存在)。看起来 nokogiri 元素没有 text= 方法,但我只是想确定一下。

也许我必须使用正则表达式?如果是这样,我将如何删除前导“:”,如果它看起来像:

<li>: blah blah blah</li>

附言我正在使用红宝石。

【问题讨论】:

    标签: ruby regex nokogiri


    【解决方案1】:
    #!/usr/bin/ruby1.8
    
    require 'rubygems'
    require 'nokogiri'
    
    html = <<EOS
      <ul>
        <li>: blah blah blah</li>
        <li>: foo bar baz</li>
      </ul>
    EOS
    
    doc = Nokogiri::HTML.parse(html)
    for li in doc.xpath('//li/text()')
      li.content = li.content.gsub(/^: */, '')
    end
    puts doc.to_html
    
    # => <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
    # => <html><body><ul>
    # => <li>blah blah blah</li>
    # =>     <li>foo bar baz</li>
    # =>   </ul></body></html>
    

    【讨论】:

    • 不应该是li.content = li.content.gsub(/^: */, '')吗?
    • @Daniel,你抓住了我。在我发布之前,这段代码经历了一些迭代。然后我注意到上一次迭代留下的变量名称,并决定只编辑好名称的答案。但我错过了一个。
    • 如何保留列表元素中的链接?
    • 只需将 xpath 更改为 '//li/text()'。我会相应地编辑答案。
    • 酷,非常感谢。我也尝试过:definition.inner_html = definition.inner_html.gsub(/^: */, '') 似乎也可以。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    • 2018-07-14
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多