首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标C- sudzc,返回空的ArrayOfString,但xml响应包含数据

目标C- sudzc,返回空的ArrayOfString,但xml响应包含数据
EN

Stack Overflow用户
提问于 2012-02-08 22:58:50
回答 1查看 905关注 0票数 1

我是Objective C的新手,我正在尝试使用sudcz来使用with服务。我有一个用PHP创建的网络服务服务器,一个MySQL,现在我想和服务器通信,并获得相关的结果。

当调用一个方法时,我从服务器得到了正确的XML响应,但是返回的ArrayOfString类型的对象似乎是空的。NSLog只是打印,我假设sudzc没有把xml解析成非对称的形式,因此返回的对象是空的,我错了吗?或者我只是不能看到或处理返回的对象?有没有人有什么线索?

如果需要任何材料,我会邮寄给你。谢谢。

添加:

代码语言:javascript
复制
    CXMLElementNode* element = [[Soap getNode: [doc rootElement] withName: @"Body"] childAtIndex:0];
    if(deserializeTo == nil) {

        output = [Soap deserialize:element];

    } else {
                    NSLog(@"Deserialize to : %@", deserializeTo);
        if([deserializeTo respondsToSelector: @selector(initWithNode:)]) 
                            //problematic section
                            element = [element childAtIndex:0];
                            NSLog(@"NSSstring element : %@", element);
            output = [deserializeTo initWithNode: element];

                  } else {

            NSString* value = [[[element childAtIndex:0] childAtIndex:0] stringValue];
                            NSLog(@"NSSstring value : %@", value);
            output = [Soap convert: value toType: deserializeTo];
        }
           NSLog(@"output : %@", output);
    }

我认为有问题的部分是我将评论放入有问题的部分的地方。因为对象元素是xml元素,并且在调用output = deserializeTo initWithNode: element之后,什么也没有发生,NSLog( output )在调用对象deserializeTo上的消息deserializeTo : element之前输出与打印的NSLog(deserializeTo)相同的输出。我怀疑SoapObject实例方法initWithNode不能正常工作,因为我的deserializeTo是RSiArrayOfstring类的实例,该类是SoapObject的子集,它将此消息委托给父类( SoapObject ),并且此消息在SoapObject中的实现是:

代码语言:javascript
复制
// Called when initializing the object from a node
- (id) initWithNode: (CXMLNode*) node {
    if(self = [self init]) {
    }
    return self;
}

我看不到参数节点的任何操作

在执行此代码期间来自调试器的输出:

代码语言:javascript
复制
2012-02-08 20:22:03.166 URS[1170:b603] Deserialize to : <ArrayOfstring></ArrayOfstring>
2012-02-08 20:23:17.258 URS[1170:b603] NSSstring element : &lt;CXMLElement 0x5d7b920 [0x59701b0] return &lt;return arrayType="SOAP-ENC:Array[6]" type="SOAP-ENC:Array">&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">1 - Elektroúdržba&lt;/item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">2 - Zámočnícka dielňa&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">3 - Údržba žeriavov</item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">6 - Zámočnícká dielňa H4&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">4 - Mechanici&lt; /item>&lt; /item>&lt; item arrayType="xsd:string[1]" type="SOAP-ENC:Array">&lt; item type="xsd:string">5 - Údržba CNC&lt; /item>&lt; /item>&lt; /return>>
2012-02-08 20:56:11.353 URS[1170:b603] output : &lt; ArrayOfstring>&lt; /ArrayOfstring 
EN

回答 1

Stack Overflow用户

发布于 2012-07-22 23:09:49

嗨,我刚刚遇到了同样的问题。

我发现

代码语言:javascript
复制
[[Soap getNode: [doc rootElement] withName: @"Body"]

省略标记的命名空间。因此,在我的示例中,XML部分如下所示:

代码语言:javascript
复制
<SOAP-ENV:Body>....

将上一行更改为:

代码语言:javascript
复制
[[Soap getNode: [doc rootElement] withName: @"SOAP-ENV:Body"]

在我的情况下帮了忙。尽管如此,我不确定不同的soap实现的名称空间是否有所不同。

干杯!

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

https://stackoverflow.com/questions/9195782

复制
相关文章

相似问题

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