src = '<paragraph>And bla foo <note>not important</note> bar baz</paragraph>' doc = Nokogiri::XML(src) puts doc.xpath('paragraph').first.content
Код выше возвращает:
"And bla foo not important bar baz"
Я ищу способ получить содержимое без вложенных элементов.Вышеприведенный случай - это просто пример XML, но в этом примере я хочу получить следующее:
"And bla foo bar baz"
puts doc.xpath('paragraph/child::text()')
Я много лет не использовал XPath в гневе, но, похоже, это работает.
Или еще лучше:
puts doc.xpath('paragraph/child::text()').to_s.squeeze(' ')
Вы могли бы сделать что-то вроде
doc.xpath('paragraph').children.map { |e| e.text if e.text? }.join
Это вернет 'And Bla Foo Bar Baz' из вашего примера