给定以下使用Nokogiri解析为@response
的xml
<?xml version="1.0" encoding="UTF-8"?>
<foos type="array">
<foo>
<id type="integer">1</id>
<name>bar</name>
</foo>
</foos>
是否存在使@response.xpath(xpath)
返回array
的xpath
?
假设这个xpath必须在多个文档中重用,其中foo的命名不一致。
如果xpath不是解决这个问题的正确工具,Nokogiri是否提供了一个正确的方法?
这个xml是由rails框架自动生成的,这个问题的答案是用来为JSON响应创建一个等价于Cucumber特性的xml。
如果要选择type
属性为array
的根节点(无论根元素的名称如何),则使用以下命令:
/*[@type='array']
对于它的子元素,使用:
/*[@type='array']/*
简体:
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