使用Nokogiri检查xml响应是否有type =“array”?

时间:2011-11-20 21:01:40

标签: ruby ruby-on-rails-3 xpath nokogiri

鉴于以下xml已被解析为@response using Nokogiri

<?xml version="1.0" encoding="UTF-8"?>
<foos type="array">
  <foo>
    <id type="integer">1</id>
    <name>bar</name>
  </foo>
</foos>

xpath是否存在使@response.xpath(xpath)返回array

假设必须在foo命名不一致的多个文档中重用此xpath。

如果xpath不是解决此问题的正确工具,Nokogiri是否提供了一种方法?

此xml由rails框架自动生成,此问题的答案旨在用于创建等效于this Cucumber feature for JSON responses的XML。

2 个答案:

答案 0 :(得分:2)

如果要在根type属性为array时选择根节点(无论根元素的名称如何),请使用:

/*[@type='array']

对于其子女,请使用:

/*[@type='array']/*

答案 1 :(得分:1)

简单地:

if doc.root['type']=='array'

这是一个测试用例:

@response = <<ENDXML
<?xml version="1.0" encoding="UTF-8"?>
<foos type="array">
  <foo>
    <id type="integer">1</id>
    <name>bar</name>
  </foo>
</foos>
ENDXML

require 'nokogiri'
doc = Nokogiri.XML(@response)
if doc.root['type']=='array'
  puts "It is!"
else
  puts "Nope"
end

根据您的需要,您可能希望:

case doc.root['type']
  when 'array'
    #...
  when 'string'
    #...
  else
    #...
end