将XML文本节点存储到数组中

时间:2017-10-31 18:57:38

标签: ruby xml nokogiri

我试图存储"目录中的所有文本节点"元素到一个字符串数组。我得到一个空数组返回,我无法弄清楚数组为空的原因。

这是XML

<config>
    <directories>
        <directory>directory1</directory>
        <directory>directory2</directory>
    </directories>
</config>

这是红宝石代码

require 'nokogiri'

directories = []
directories.each do |directory|
  directory = config.at('//config/directories').text
end

我错过了什么?

1 个答案:

答案 0 :(得分:1)

那是因为你正在迭代一个空数组。您创建的directories数组没有任何内容,这就是为什么当您从目录中分配迭代内容时,您也会得到一个空数组。

尝试迭代解析的XML,然后推送,如:

xml_structure = <<-XML
<config>
  <directories>
    <directory>directory1</directory>
    <directory>directory2</directory>
  </directories>
</config>
XML

doc = Nokogiri::XML(xml_structure)
directories = []
doc.xpath('//config/directories/directory').each do |directory|
  directories.push directory.text
end
p directories
# ["directory1", "directory2"]

或者使用地图也可以这样做:

doc = Nokogiri::XML(xml_structure)
p doc.xpath('//config/directories/directory').map(&:text)
# ["directory1", "directory2"]