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

Storing XML text nodes into an array

我正在尝试将 "directory" 元素的所有文本节点存储到一个字符串数组中。我收到了一个空数组,但我不知道为什么数组是空的。

这是XML

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

这是 ruby 代码

require 'nokogiri'

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

我错过了什么?

那是因为您正在遍历一个空数组。您创建的 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"]