2011-01-13 49 views
3
src = '<paragraph>And bla foo <note>not important</note> bar baz</paragraph>' 
doc = Nokogiri::XML(src) 
puts doc.xpath('paragraph').first.content 

以上的回报代码:如何获得内容,而无需嵌套元素与引入nokogiri

"And bla foo not important bar baz" 

我正在寻找一种方式来获得内容,而无需嵌套元素。 上面的例子只是一个示例XML,但在这个例子中,我想这是一个结果:

"And bla foo bar baz" 

回答

7
puts doc.xpath('paragraph/child::text()') 

我没有用的XPath愤怒多年,但似乎工作。

或者更好的是:

puts doc.xpath('paragraph/child::text()').to_s.squeeze(' ') 
+1

挤压降低了字符串“和bla fo bar baz' - 它减少了o的:-)你应该添加挤压(''),而不是 – HakonB 2011-01-13 11:17:07

+0

固定,谢谢@HakonB :-) – noodl 2011-01-13 11:47:13

2

你可以做类似

doc.xpath('paragraph').children.map { |e| e.text if e.text? }.join 

将从你的榜样回报“和喇嘛富酒吧巴兹”