我正在使用一个使用soap / wsdlDriver的gem。
当我发布时,我得到了一个SOAP响应并且无法轻松解析它。
这是我回复的回复:
#<SOAP::Mapping::Object:0x159e95faf098 {}id="27b907f8-da51-f611-ab02-4c5f88a8ec8
8" {}error=#<SOAP::Mapping::Object:0x159e95fae33c {}number="0" {}name="No Error"
{}description="No Error">>
我需要在id =“xxxx”
中获取整个值这是关于onoku的内容(注意:它在本地工作)。这来自于测试response.id的各种变体(其中response.inspect是创建上面输出的内容)
F” {}错误=#&GT; 响应[ID] /disk1/home/slugs/220752_47a08bb_10e7/mnt/app/controllers/sugarcrm_controller.rb :77:警告:对象#id将是 弃用;使用Object#object_id nil response.id: /disk1/home/slugs/220752_47a08bb_10e7/mnt/app/controllers/sugarcrm_controller.rb :79:警告:对象#id将是 弃用;使用Object#object_id 23891500658740 /disk1/home/slugs/220752_47a08bb_10e7/mnt/app/controllers/sugarcrm_controller.rb :80:警告:对象#id将是 弃用;使用Object#object_id这个 是contact_id:23891500658740 事件:
答案 0 :(得分:1)
好的,我95%确定这是SOAP::Mapping::Object#inspect
的输出,而不是实际的响应。从该类看,你看起来使用[]
方法来提取属性。
所以,如果我正确地阅读,那么看起来你可能想要:
response_id = response_object['id']
虽然以{}
开头的每个属性看起来都很奇怪。因此,如果它实际上是属性名称的一部分,您可能需要:
response_id = response_object['{}id']
但这看起来很奇怪,可能表明你使用的SOAP库没有正确解析响应。
免责声明:我以前从未使用过这个lib,并且只是通过阅读文档来发布这个...这在描述使用这个类的方式上可能会非常准确。 < / p>
答案 1 :(得分:0)
我不知道如何用ruby做这个,但可能就像javascript中的这段代码一样。
var t = "<SOAP message........>";
var id = t.replace(/.*id=\"(.*?)\".*/, "$1");
正则表达式详细信息:
.*id=\"(.*?)\".*
.* = anything, 0 or N times.
(.*?) = anything, 0 or N times, stopping at first match.
$1 = first group, the content inside ().
因此,everthing将被id内容取代。