【问题标题】:SOAP response stored into NSString need to be parsed存储在 NSString 中的 SOAP 响应需要被解析
【发布时间】:2019-03-28 15:10:21
【问题描述】:

我有这个 SOAP 请求并且我的响应已经存储到一个 NSString 中,我需要读取这个响应并将数据存储到一个字段中。这是我的回应的一个例子:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ReadDataResponse xmlns="http://sysman.it/webservices/"><ReadDataResult>success</ReadDataResult><Data><TableName>V_CP_NOTIFICATIONS_DEVICEID</TableName><values><ArrayOfCpFieldAndValue><cpFieldAndValue><Name /><Value>0</Value><Type>IntegerType</Type><CompOperator>=</CompOperator></cpFieldAndValue></ArrayOfCpFieldAndValue></values><keys><cpFieldAndValue><Name>DEVICE_ID</Name><Value>1006be49b73a98af</Value><Type>VarcharType</Type><CompOperator>=</CompOperator></cpFieldAndValue><cpFieldAndValue><Name>PUSH_READCNT</Name><Value>0</Value><Type>IntegerType</Type><CompOperator>=</CompOperator></cpFieldAndValue></keys><orClause>false</orClause></Data></ReadDataResponse></soap:Body></soap:Envelope>

<cpFieldAndValue><Name /><Value>0</Value> 我需要将该数字存储到变量中。这是我目前的代码:

NSData *postData = [sSOAPMessage dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%lu", [postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"----"]];
[request setHTTPMethod:@"POST"];
[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"Request reply: %@", requestReply);

}] resume];

感谢您的帮助。

【问题讨论】:

  • 您看过任何 XML 解析器吗?喜欢NSXMLParser
  • @Larme 我的 xml 存储为 NSString
  • 这不是在回答问题。您的响应是 XML。所以你需要解析XML。那么您是否看过如何在 Objective-C 中解析 XML?
  • @Larme 是的,当然,我不能让它工作
  • 那么你的尝试是什么?我不熟悉 XML 解析,但是如果有人看到您的问题,他/她可能会发现您的错误,但可能会懒惰地为您解析整个 XML。此外,您的问题似乎是“我的代码”。

标签: ios objective-c xml soap


【解决方案1】:

你可以参考这个SO Answer。您必须复制XMLParser.hXMLParser.m 文件并按如下方式使用:

NSString *xmlString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSDictionary *xmlDoc = [NSDictionary dictionaryWithXMLString:xmlString];
NSInteger value = [[xmlDoc valueForKeyPath:@"soap:Body.ReadDataResponse.Data.values.ArrayOfCpFieldAndValue.cpFieldAndValue.Value"] integerValue];
NSLog(@"%d", value);

输出:

0

【讨论】:

  • 感谢它解决了我的问题,现在我只需要一个提示,我正在将这些数据存储到会话中。 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { ...我如何在会话之外使用这个变量?
  • 感谢您接受我的回答您可以做两件事,一是调用此函数返回此块,您可以参考medium.com/@amyjoscelyn/…
  • 或者你可以使用 NSURLSessionDelegate developer.apple.com/documentation/foundation/…
【解决方案2】:

【讨论】:

    猜你喜欢
    • 2012-08-19
    • 1970-01-01
    • 2020-04-22
    • 2016-09-18
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多