0

バックグラウンド

デバイスのRESTAPIからXML応答があり、特定のキーと値のペアを選択する必要があります。現在、HTTParty getを使用してXMLを取得し、テキストを選択しています。私はそれを難し​​い方法でやっていると思います、そしてもっと簡単な方法があるに違いありません。

質問

理解しやすく、再利用しやすくするために、これを実現する簡単な方法はありますか?

XMLは次のようになります。formated="Off"キー/値のペアを選択しようとしています。

<?xml version="1.0" encoding="UTF-8"?><properties><property id="ST" value="0" formatted="Off" uom="on/off"/></properties>

私が現在使用しているコード:

require 'httparty'

  class Rest
    include HTTParty
    format :xml
      end

  listen_for (/status (.*)/i) do |input|
    command_status input.downcase.strip
    request_completed
  end

  def command_status(input)
  inputst = @inputSt[input]
  unless inputst.nil?
      status = status_input(inputst)
      say "#{input} is #{status}" 
  else
      say "I'm sorry, but I am not programmed to check #{input} status." 
  end
 end    

 def status_input(input)
    # Battery operated devices do not continuously reports status, thus will be blank until first change after an ISY reboot or power cycle.
    resp = Rest.get(@isyIp + input, @isyAuth).inspect
    resp = resp.gsub(/^.*tted"=>"/, "")
    status = resp.gsub(/", "uom.*$/, "")
    return status.downcase.strip
  end
4

1 に答える 1

0

parsed_response結果のHASH深度を使用して、XMLをHASHに解析する方法を理解しました。先端をありがとう、デイブ!

  def status_input(input)
    # Battery operated devices do not continuously reports status, thus will be blank until first change after an ISY reboot or power cycle.
    resp = Hash[Rest.get(@isyIp + input, @isyAuth).parsed_response]
    status = resp["properties"]["property"]["formatted"]
    return status.downcase.strip
  end

ご協力いただきありがとうございます!

于 2013-02-03T02:29:51.790 に答える