首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从SOAP数组响应中获取数据的特定部分?

如何从SOAP数组响应中获取数据的特定部分?
EN

Stack Overflow用户
提问于 2014-08-21 19:55:50
回答 1查看 106关注 0票数 0

我刚开始使用红宝石,花了一整个上午在这上面打我的头。我以数组的形式从SOAP服务器获得响应(如下所示),并使用这段代码尝试获取活动调用(78523)的callID:

代码语言:javascript
复制
activecall = driver.GetActiveCalls("clientHandle"=>handle,
            "lineID"=>line["OpenLineResult"].lineID,
            "getCallParties"=>1,
            "getCallProperties"=>1)

print "  call ID = ", activecall["GetActiveCallsResult"].callID,
  "\n  Line Type = ", activecall["GetActiveCallsResult"].calledID, "\n\n"

我知道错误:

代码语言:javascript
复制
 undefined method `callID' for #<SOAP::Mapping::Object:0x..fdb79d636> (NoMethodError)

知道我做错了什么,以及如何提取这些数据吗?

代码语言:javascript
复制
<SOAP::Mapping::Object:0x..fdb7ab5e2 {http://www.ShoreTel.com/ProServices/SDK/Web}GetActiveCallsResult=#
<SOAP::Mapping::Object:0x..fdb7ab4b6 {http://www.ShoreTel.com/ProServices/SDK/Web}ShoreTelCallStateInfo=[#
    <SOAP::Mapping::Object:0x..fdb7ab3b2 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
        <SOAP::Mapping::Object:0x..fdb7ab25e {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20659" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callID="71495" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+18012624550" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+18012624550" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
    <SOAP::Mapping::Object:0x..fdb7a8b3a {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=#
        <SOAP::Mapping::Object:0x..fdb7a89fa {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
    <SOAP::Mapping::Object:0x..fdb7a7cb2 {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" 
        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>> 
        {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="2572420445" 
        {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-D992-537E-3FD3-0010492377D9}"> 
        {http://www.ShoreTel.com/ProServices/SDK/Web}callState="OnHold" 
        {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail="Active">, 
    #<SOAP::Mapping::Object:0x..fdb7a4d1e {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
    <SOAP::Mapping::Object:0x..fdb7a4bca {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20659" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callID="78523" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+13852045017" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
    <SOAP::Mapping::Object:0x..fdb7a256e {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=#
    <SOAP::Mapping::Object:0x..fdb7a2460 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742590" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#<SOAP::Mapping::Object:0x..fdb7a172c 
    {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="20" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (20)">>>
    {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="2320005488" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-D995-537E-3FD3-0010492377D9}"> 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Connected" 
    {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail="Active">]>>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 21:55:24

从红宝石端处理SOAP,它将重新注释以使用http://savonrb.com/version2。但不管怎么说,你有没有尝试过

代码语言:javascript
复制
activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"]

我认为这些MappingObjects提供了对切尔德节点的访问,就像使用密钥访问散列一样,在本例中,xml模式的限定名参见http://ruby-doc.org/stdlib-1.8.7/libdoc/soap/rdoc/SOAP/Mapping/Object.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25434851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档