target-c: Webservice, как получить два элемента после анализа через NSXMLParser? - PullRequest
0 голосов
/ 29 сентября 2011

Я использую приведенный ниже код, который дает мне строку одного элемента после анализа, в то время как я хочу получить текст другого элемента на основе результата первого элемента.

например, я получаю значение bool из ResponseType и теперь на основе этого значения я хочу получить значение другого элемента ("TotalAmt").и если ResponseType равен 0, то в коде появляется другое поле DeclineReason, а затем я хочу получить значение DeclineReason.

<AuthorizeResult>
            <ResultCode>Success</ResultCode>
            <RequestTime>2011-09-30T01:42:54.1834586-04:00</RequestTime>
            <ResultObj>
               <RequestId>55258</RequestId>
               <ResponseType>1</ResponseType>
               <UserType>Permanent</UserType>
               <RequestDate>2011-09-30T05:42:54.481</RequestDate>
               <TransactionId>0081315926057572</TransactionId>
               <TransactionCode>001440</TransactionCode>
               <TotalAmt>1</TotalAmt>
               <UserId>47</UserId>
            </ResultObj>
         </AuthorizeResult>

Я кодирую это, но оно не работает и получаю только значение "ResponseType"

-(void) parser:(NSXMLParser *) parser didStartElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *) qName attributes:(NSDictionary *) attributeDict {
    if ([elementName isEqualToString:@"ResponseType"]) 
    { 
        if (!soapResults) 
        {
            soapResults = [[NSMutableString alloc] init]; 
            elementFound = YES;
        }
    }
}


//---when the text in an element is found---
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string {
    if (elementFound) 
    { 
        [soapResults appendString: string];
    }   
}


//---when the end of element is found---
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementName isEqualToString:@"ResponseType"]) 
    { //---displays the country--- 
        NSLog(@"%@", soapResults); 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Response Type!" message:soapResults delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show]; 
        [alert release]; 
        [soapResults setString:@""]; 
        elementFound = FALSE;
    }
}

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Я вызываю [xmlParser parse] два раза.

qelementName = @"ResponseType";
[soapResults setString:@""]; 
[xmlParser parse];              
ResponseType =[[NSString alloc] initWithFormat:@"%@", soapResults];

qelementName = @"TotalAmt";
[soapResults setString:@""]; 
[xmlParser parse];
TotalAmt = [[NSString alloc] initWithFormat:@"%@", soapResults];

и все работает.

0 голосов
/ 29 сентября 2011

Как насчет

if ([elementName isEqualToString: @ "ResultObj"] || [elementName isEqualToString: @ "Reason"])

в didStartElement и didEndElement?

...