用红宝石中的Nokogiri从XML中提取XML

时间:2015-05-07 11:49:45

标签: ruby xml parsing nokogiri

我想从xml中提取标签div内部的文本部分,同时考虑回车符。在ruby中使用以下代码。

_self

问题是在数组中我存储了所有没有回车的文本,我想在一个不同的数组位置放入用回车分隔的文本的每个部分。

例如,假设我有这个xml:

doc = Nokogiri::HTML(xmlpost.content)
contenido = doc.css('div').css('span')
parrafo = Array.new()
contenido.each do |par|
  parrafo.push(par.text)
end
parrafo_json = parrafo.to_json
return parrafo_json

当我在这段代码上运行时,我正在构建这个数组:

[ “example1example2”, “示例3”]

我想考虑到这个问题:

[ “例1”, “示例2”, “示例3”]

1 个答案:

答案 0 :(得分:0)

我希望我得到你期望的正确实现。首先,摆脱ruby中的这个php:

parrafo = Array.new()
contenido.each do |par|
  parrafo.push(par.text)
end

这是如何在ruby中重写的:

parrafo = contenido.map(&:text)

我们contenidopar.text中的每个项目map。现在你有了一系列文本。您可以通过回车加入它们:

parrafo_with_cr = parrafo.join($/)
#⇒ "First line\nsecond line\n..."

以上将使用与平台无关的分隔符$/来连接行。要专门加入,例如\n

parrafo_with_cr = parrafo.join("\n")

希望它有所帮助。

UPD 有关更新的问题(按<br>代码分隔):

contenido = doc.css('div').css('span').map do |i|
  i.inner_html.split(/<br>/)
end.flatten - ['']
#⇒ [
#  [0] "example1",
#  [1] "example2",
#  [2] "example3"
#]

后者- ['']会在<br> s的最开头删除由<span>生成的空元素。

旁注:您的HTML无效,<br>代码没有关闭兄弟。