Ruby on rails 使用Rails 4和Savon 2解析XML响应
我使用Rails和Savon 2从SOAP Web服务获取数据 代码如下:Ruby on rails 使用Rails 4和Savon 2解析XML响应,ruby-on-rails,ruby-on-rails-4,savon,Ruby On Rails,Ruby On Rails 4,Savon,我使用Rails和Savon 2从SOAP Web服务获取数据 代码如下: client = Savon.client(wsdl: "http://www.webservicex.net/periodictable.asmx?WSDL", log_level: :debug, pretty_print_xml: true) message = {'ElementName' => 'Zinc'}
client = Savon.client(wsdl: "http://www.webservicex.net/periodictable.asmx?WSDL",
log_level: :debug,
pretty_print_xml: true)
message = {'ElementName' => 'Zinc'}
response = client.call(:get_element_symbol, message: message)
logger.debug "Body=" + response.body.to_s
symbol = response.to_hash[:get_element_symbol_response][:get_element_symbol_result][:NewDataDet][:Table][:Symbol]
请求正常,我在响应中获得数据:
Body={:get_element_symbol_response=>{:get_element_symbol_result=>"<NewDataSet>\n <Table>\n <Symbol>Zn</Symbol>\n </Table>\n</NewDataSet>", :@xmlns=>"http://www.webserviceX.NET"}}
更新:
如果我这样做:
symbol = response.to_hash[:get_element_symbol_response][:get_element_symbol_result]
logger.debug "Symbol=" + symbol.inspect
我得到这个:Symbol=“\n\n Zn\n\n”
我认为错误在于我试图以散列模式获取符号,但事实并非如此。但是我怎样才能得到这个符号呢?我不敢相信我必须手动解析字符串…您可以使用它来解析XML文本:
require 'nokogiri'
text = response.body[:get_element_symbol_response][:get_element_symbol_result]
Nokogiri::XML(text).css('Symbol').text # => Zn
# or
Nokogiri::XML(text).xpath('//NewDataSet/Table/Symbol').text # => Zn
还有其他类似json或哈希风格的吗?@Rober你可以使用
Nokogiri::Slop
查看他们的文档,也很有趣
require 'nokogiri'
text = response.body[:get_element_symbol_response][:get_element_symbol_result]
Nokogiri::XML(text).css('Symbol').text # => Zn
# or
Nokogiri::XML(text).xpath('//NewDataSet/Table/Symbol').text # => Zn