2013-11-18 1 views
0

Я не могу разобрать ответ на мыло, я пробовал много способов, но не решил свою проблему, мне нужно значение USERNAME и PASSWORD. Я получаю следующий ответ после запроса мыла:Как разобрать ответ SOAP xml в программировании iPhone

<?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]; 
} 


} 

Как я могу получить значение имени пользователя и пароля, может кто-то помочь мне разобрать это. Спасибо заранее.

+1

Пробовали ли вы с помощью любого XML-парсер? – Leijonien

+0

Также посмотрите на связанные вопросы рядом с вашим вопросом, есть куча примеров того, как разбирать xml. – Leijonien

+0

Я использую NSXMLParser, в didStartElement под тегом AuthenticateResult не могу получить значения USERNAME и PASSWORD. – user2586519

ответ

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.

0

Пожалуйста, ознакомьтесь с демонстрацией, подготовленной для iOS/OSX, с использованием примера веб-сервиса.

Он использует быстрый запрос SOAP-запроса & парсер ответа.

[DEMO] [1]

Совершено с помощью Alamofire & SWXMLHash библиотека

Спасибо

 Смежные вопросы

  • Нет связанных вопросов^_^