1

删除所有标签的更简单方法是Nokogiri::XML::DocumentFragment只保留由空格分隔的文本?

我想改造:

Hello<br>My name is McOmghall

进入:

Hello My name is McOmghall

我的解决方案是:

Nokogiri::XML.fragment(html_text).children.to_a.flatten.select { |node| node.class == Nokogiri::XML::Text}

然后连接该数组,在每个元素之间放置空格,但我认为它不是最理想的而且不是很清楚。


编辑:

这是我的最终解决方案:

Nokogiri::XML.fragment(html_text).xpath('.//text()').map(&:text).join(' ')
4

3 回答 3

5
root = Nokogiri::HTML('<div id="test">Hello<br>My name is McOmghall</div>')
root.at_css('#test').text
# => "HelloMy name is McOmghall"
root.at_css('#test').xpath('.//text()').map(&:text)
# => ["Hello", "My name is McOmghall"]
p root.at_css('#test').xpath('.//text()').map(&:text).join(' ')
# => "Hello My name is McOmghall"
于 2013-08-31T18:37:59.717 回答
2

Nokogiritext?对于这种情况有一个非常方便的方法:

html = "Hello<br>My name is McOmghall"    

Nokogiri::HTML.fragment(html).children.select(&:text?).join(' ')
# => "Hello My name is McOmghall"
于 2013-09-02T00:08:34.287 回答
0

如果 之前或之后br没有空格,则文本中不会有空格

doc = Nokogiri::HTML 'Hello<br>My name is McOmghall'
doc.text
#=> "HelloMy name is McOmghall"

在每个之后添加一个空格很容易br

doc.search('br').each{|br| br.after ' '}
doc.text
#=> "Hello My name is McOmghall"
于 2013-09-01T01:08:17.340 回答