Nokogiri返回XML标签和数据

时间:2012-06-21 18:44:13

标签: ruby xml-parsing nokogiri

XML数据:

<configs>
<config>
<name>XP</name>
<browser>IE</browser>
<browser>FF</browser>
<browser>Chrome</browser>
</config>
</configs>

我是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

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

1 个答案:

答案 0 :(得分:7)

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

:name => i.xpath('name').text

.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

你可能想要一个"IEFFChrome"的blob,在这种情况下不要小心。