2011-11-20 36 views
1

考慮下面的XML已被解析成@responseusing Nokogiri使用Nokogiri檢查xml響應是否有type =「array」?

<?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

假設這個xpath必須在foo的命名不一致的多個文檔中重用。

如果xpath不是解決此問題的正確工具,Nokogiri是否提供了一種方法?

此xml由rails框架自動生成,並且此問題的答案旨在用於創建與this Cucumber feature for JSON responses等效的XML。

回答

2

如果你想選擇根節點時,其type屬性爲array(無論根元素的名稱),然後使用此:

/*[@type='array'] 

對於它的孩子,使用:

/*[@type='array']/* 
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