使用ruby中的Nokogiri从XML中提取,使用br从div中提取

使用ruby中的Nokogiri从XML中提取,使用br从div中提取,ruby,xml,parsing,nokogiri,Ruby,Xml,Parsing,Nokogiri,我想从xml中提取标签div中的文本部分,并考虑回车。在ruby中使用以下代码 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 问题是,在数

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

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
问题是,在数组中,我存储了所有没有回车符的文本,我希望将文本的每一部分都放在不同的数组位置,并用回车符分隔

例如,假设我有以下xml:

<div><span><br>example1</br><br>example2</br></span></div>
<div><span>example3</span></div>

示例1

示例2
例3
当我在这段代码上运行此命令时,我正在构建此数组:

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

我想考虑一下这方面的br:


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

我希望我能正确地实现您的期望。首先,去掉ruby中的php:

parrafo = Array.new()
contenido.each do |par|
  parrafo.push(par.text)
end
这是如何用ruby重写的:

parrafo = contenido.map(&:text)
在这里,我们从
contenido
par.text
中的每一项。现在您有了一系列文本。您可以使用回车键加入其中:

parrafo_with_cr = parrafo.join($/)
#⇒ "First line\nsecond line\n..."
以上内容将使用平台无关分隔符
$/
连接行。专门加入,例如,
\n

parrafo_with_cr = parrafo.join("\n")
希望能有帮助

UPD更新问题(按

标签打断):

contenido=doc.css('div').css('span').map do|i|
i、 内部html.split(/
/) end.flatte-[“”] #⇒ [ #[0]“示例1”, #[1]“示例2”, #[2]“示例3” #]
后面的
-['']
在这里删除了

的最开始部分中产生的空元素


旁注:您的HTML无效,

标记没有结束同级标记。

您应该发布您正在处理的XML的示例以及您希望从中获得的结果。这就是问题所在。我正在编辑答案谢谢。解决方案规则,但数组现在是这样:[“
示例1
”、“
示例2
”、“示例3”]我只想要文本。
contenido = doc.css('div').css('span').map do |i|
  i.inner_html.split(/<br>/)
end.flatten - ['']
#⇒ [
#  [0] "example1",
#  [1] "example2",
#  [2] "example3"
#]