从REST查询返回一个项时,httparty XML解析器无法正常工作

时间:2014-09-30 16:49:18

标签: ruby httparty

我正在尝试使用httparty(在Ruby程序中)来查询REST服务并解析XML代码。

我发现了一个奇怪的问题,如果REST查询返回两个或多个元素,httparty将这些视为HASH数组。

如果REST查询返回一个元素,则httparty将其视为HASH(而不是具有一个元素的数组)。

这有副作用,我无法在"每个"因为当我在包含散列的变量上执行此操作时,它会爆炸(而如果我循环使用HASH数组则它可以正常工作)。

这是我正在使用的代码:

response = self.class.get("/api/vdc/#{vDC}/peers")

peers = response['References']['Reference']

peers.each do |peer|

# ....various stuff.... 

end 

"参考文献"是主要标签和"参考"是返回的项目数,范围从1到多(如果代码失败,则代码失败,如果许多代码正常工作)。

思考?谢谢!

马西莫。

1 个答案:

答案 0 :(得分:0)

获得一致行为的快速而简单的方法是将结果放入数组并将其展平。

一种敏感的方法:

response = self.class.get("/api/vdc/#{vDC}/peers")

peers = response['References']['Reference']
peers = [peers] if peers.is_a?(Hash)

类不敏感的方法:

response = self.class.get("/api/vdc/#{vDC}/peers")

peers = [response['References']['Reference']].flatten

这样,无论是返回单个散列还是散列数组,结果都会被视为每次散列数组。您需要确定flatten方法的费用是否过高 - 非常大的数组可能需要一些时间/内存来展平。