鉴于以下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。
答案 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