我无法解析soap响应,我尝试了很多方法但没有解决我的问题,我需要USERNAME和PASSWORD的值。 我在肥皂请求后得到以下回复:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AuthenticateResponse xmlns="http://tempuri.org/">
<AuthenticateResult>
<DocumentElement>
<Status>
<USERNAME>True</USERNAME>
<PASSWORD>true</PASSWORD>
</Status>
</DocumentElement>
</AuthenticateResult>
</AuthenticateResponse>
</soap:Body>
</soap:Envelope>
这是我的代码:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName attributes: (NSDictionary *)attributeDict
{
if ( [elementName isEqualToString:@"AuthenticateResponse"]||[elementName
isEqualToString:@"AuthenticateResult"] || [elementName isEqualToString:@"DocumentElement"])
{
statusArray = [[NSMutableArray alloc] init];
}
else if ([elementName isEqualToString:@"Status"])
{
authenticate = [[Authenticate alloc] init];
}
else if ([elementName isEqualToString:@"USERNAME"])
{
currentElementValue = [[NSMutableString alloc] init];
}
else if ([elementName isEqualToString:@"PASSWORD"])
{
currentElementValue = [[NSMutableString alloc] init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (currentElementValue)
{
[currentElementValue appendString:string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if( [elementName isEqualToString:@"USERNAME"])
{
authenticate.userName = currentElementValue;
}
else if ([elementName isEqualToString:@"PASSWORD"])
{
authenticate.strAuthenticate = currentElementValue;
}
else if ([elementName isEqualToString:@"Status"]) {
[statusArray addObject:authenticate];
}
}
如何获取用户名和密码的值,有人可以帮我解析一下。 提前谢谢。
答案 0 :(得分:1)
试试这个:
为您的班级添加2个属性。
@property (nonatomic, strong) NSString *elementValue;
@property (nonatomic, strong) NSMutableArray *authenticationValues;
将您当前的实施替换为:
- (void)parseXML:(NSData *)xmlData {
self.authenticationValues = [NSMutableArray array];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
parser.delegate = self;
[parser parse];
NSLog(@"Authentication values: %@", self.authenticationValues);
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// Keep track of the current element value
self.elementValue = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// If the element was 'username' or 'password', add the value to the authenticationValues array
if ([elementName isEqualToString:@"USERNAME"] ||
[elementName isEqualToString:@"PASSWORD"]) {
[self.authenticationValues addObject:self.elementValue];
}
}
要解析文件,请执行方法parseXML:
运行时,您应该在控制台上看到以下输出:
Authentication values: (
True,
true
)
这是USERNAME和PASSWORD的值。
答案 1 :(得分:0)
请参阅使用示例网络服务为iOS / OSX准备的演示。
它使用swift - SOAP请求创建者&amp;响应解析器。
[DEMO] [1]
使用Alamofire&amp; SWXMLHash库
由于