如何使用Ruby从SOAP信封中提取/解析?

时间:2010-08-11 17:19:25

标签: ruby regex soap

我正在使用一个使用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   事件:

2 个答案:

答案 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内容取代。

相关问题