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标记。有没有办法剥夺他们,我只是没有找到?
答案 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,在这种情况下不要小心。