Nokogiri返回XML标签和数据

tku*_*eck 3 ruby nokogiri xml-parsing

XML数据:

<configs>
<config>
<name>XP</name>
<browser>IE</browser>
<browser>FF</browser>
<browser>Chrome</browser>
</config>
</configs>
Run Code Online (Sandbox Code Playgroud)

我是Ruby,Nokogiri和一般编程的新手.我正在尝试编写一个QA工具来帮助实现自动化.

Ruby代码:

doc = Nokogiri::XML(open("configs.xml"))
configs = doc.xpath("//configs/config").map do |i|
  {'name' => i.xpath('name').to_s, 'browsers' => i.xpath('browser').to_s}
end

configs.each do |i|
  puts i['name']
  puts i['browsers']
end
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,它返回数据,但包含XML标签.有没有办法剥夺他们,我只是没有找到?

Dav*_*ton 7

使用.text获得的文本节点数据:

:name => i.xpath('name').text
Run Code Online (Sandbox Code Playgroud)

.to_s 是XML节点的字符串表示形式,它比您正在寻找的更多.

但是,如果您期望单独的浏览器条目,则其余代码会有点破碎.

原样,它会将文本数据粉碎成一个单独的blob.而是将它们连接在一起等,例如:

configs = doc.xpath("//configs/config").collect do |cfg|
  browsers = cfg.xpath('browser').collect { |b| b.text }.join(', ')
  { name: cfg.xpath('name').text, browsers: browsers }
end

configs.each do |i|
  puts i[:name]
  puts i[:browsers]
end
Run Code Online (Sandbox Code Playgroud)

你可能想要一个blob "IEFFChrome",在这种情况下没关系.