3

XML 数据:

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

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

红宝石代码:

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 标记。有没有办法剥离它们,我只是没有找到?

4

1 回答 1

7

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

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

.to_s是 XML 节点的字符串表示形式,这比您要查找的要多。

但是,如果您期望单独的浏览器条目,那么您的其余代码会有点损坏。

照原样它将文本数据粉碎成一个单一的斑点。而是将它们连接在一起,等等,例如:

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

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

于 2012-06-21T18:52:41.590 回答