【问题标题】:Nokogiri: Merge neighbour text nodes recursively?Nokogiri:递归合并相邻文本节点?
【发布时间】:2010-09-10 20:38:23
【问题描述】:

我有一个准备好的 Nokogiri 页面,其中垃圾被删除了......但文本部分仍然存储在不同的节点中......

我想要做的是将所有直接相邻的文本节点连接到一个文本节点中......

我想出了什么:

#merge neighbour text nodes -> connect content
def merge_text_nodes(node)
  previoustext = false
  node.children.each_with_index do |item,i|
    if item.name != 'text()'
      merge_text_nodes(item)
      previoustext = false
    else
      if previoustext
        node.children[i-1].inner_html += item.inner_html
        item.remove
      end
      previoustext = true
    end
  end
end

但它似乎没有按预期工作 - 它似乎什么也没做...有人可以告诉我如何正确地做/告诉我错误/正确的方法吗?

【问题讨论】:

    标签: ruby nokogiri


    【解决方案1】:

    好吧,我终于自己做对了:

    def merge_text_nodes(node)
      prev_is_text = false
    
      newnodes = []
      node.children.each do |element|
        if element.text?
          if prev_is_text
            newnodes[-1].content += element.text
          else
            newnodes << element
          end
          element.remove
          prev_is_text = true
        else
          newnodes << merge_text_nodes(element)
          element.remove
          prev_is_text = false
        end
      end
    
      node.children.remove
      newnodes.each do |item|
        node.add_child(item)
      end
    
      return node
    end
    

    【讨论】:

      【解决方案2】:

      这个问题的一个有趣的解决方案可能如下:

      xml # your Nokogiri XML object, with unmerged text nodes
      xml = Nokogiri::XML(xml.to_xml)
      

      从字符串中重新解析 XML 会导致相邻的文本节点被合并作为副作用。

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2010-08-12
        • 1970-01-01
        • 2011-08-05
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        相关资源
        最近更新 更多