gpt4 book ai didi

iphone - SOAP 关键字的 SudzC 问题

转载 作者:行者123 更新时间:2023-11-28 22:51:07 26 4
gpt4 key购买 nike

我有这样的回应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:SurfaceElementListResponse xmlns:ns2="http://isiows.isiom.fr/schema/DmdCreation" xmlns:ns3="http://isiows.isiom.fr/schema/Error" xmlns:ns4="http://isiows.isiom.fr/schema/DmdDetail">
<SurfaceElementListResult>
<idSurfaceElement>9482</idSurfaceElement>
<name>R04-</name>
<type>NIVEAU</type>
</SurfaceElementListResult>
<SurfaceElementListResult>
<idSurfaceElement>9486</idSurfaceElement>
<name>Zone A</name>
<type>ZONE</type>
</SurfaceElementListResult>
</ns2:SurfaceElementListResponse>
</soap:Body>
</soap:Envelope>

我正在等待每个对象被反序列化为 NSDictionary,因为它适用于除上述之外的所有其他 WS 响应。与其他响应相比,在SOAP.m:+ (id) deserialize: (CXMLNode*) element 方法中,所有针对声明NSString* type = [Soap getNodeValue:element withName :@"type"]; 返回 nil,因此它继续 return [Soap deserializeAsDictionary:element]; 我得到了必要的结果。在我的例子中,当我到达 NSString* type = [Soap getNodeValue:element withName:@"type"]; 时,语句为第一个对象返回“NIVEAU”,为另一个对象返回“ZONE”,这不允许应用程序去执行 [Soap deserializeAsDictionary:element]; 并且我得到一个字符串对象而不是 NSDictionary 作为解析结果。

你能帮我解决这个问题吗?

最佳答案

// Deserialize an object as a generic object
+ (id) deserialize: (CXMLNode*) element{

// Get the type
NSString* type = [Soap getNodeValue:element withName:@"type"];

查看 [Soap getNodeValue]... 我发现,此函数的使用过于笼统。它用于获取字段的属性,作为字段的值。

// Gets the value of a named node from a parent node.

+ (NSString*) getNodeValue: (CXMLNode*) node withName: (NSString*) name {

// Set up the variables
if(node == nil || name == nil) { return nil; }
CXMLNode* child = nil;

// If it's an attribute get it
if([node isKindOfClass: [CXMLElement class]])
{
child = [(CXMLElement*)node attributeForName: name];
if(child != nil) {
return [child stringValue];
}
}

// Otherwise get the first element
child = [Soap getNode: node withName: name];
if(child != nil) {
return [child stringValue];
}
return nil;
}

在这种情况下,我创建了一个仅获取属性值的新方法:

// Gets the value of a node attribute
+ (NSString*) getNodeAttributeValue: (CXMLNode*) node withName: (NSString*) name{
// Set up the variables
if(node == nil || name == nil) { return nil; }
CXMLNode* child = nil;

// If it's an attribute get it
if([node isKindOfClass: [CXMLElement class]])
{
child = [(CXMLElement*)node attributeForName: name];
if(child != nil) {
return [child stringValue];
}
}
return nil;
}

并将其替换为 Soap:deserialize:

// Deserialize an object as a generic object
+ (id) deserialize: (CXMLNode*) element{

// Get the type
NSString* type = [Soap getNodeAttributeValue:element withName:@"type"];
// NSString* type = [Soap getNodeValue:element withName:@"type"];
if(type == nil || type.length == 0) {

到目前为止,它对我来说非常有效。希望对遇到同样情况的其他人有所帮助。

关于iphone - SOAP 关键字的 SudzC 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com