2011-11-15 96 views
0

我使用NSXMLParser來解析從iPad的應用程序中的Web服務接收到的xml數據。我的問題是多次調用didEndElement和didStartElement(準確地說是4次)。NSXMLParser didEndElement和didStartElement被多次調用

這裏有方法

-(void) parser:(NSXMLParser *) parser didStartElement:(NSString *) elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *) qName attributes:(NSDictionary *) attributeDict 
{ 

    NSLog(@"did start element"); 
    if([elementName isEqualToString:@"WebServiceResult"]) 
    { 

     if (!soapResults) 
     { 
      //NSLog(@"did start Element"); 
      soapResults = [[NSMutableString alloc] init]; 
     } 
     elementFound = YES; 
    } 
} 


-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    NSLog(@"did end element"); 

    if ([elementName isEqualToString:@"WebServiceResult"]) 
    { 
     NSLog(@"Soap Results: %@", soapResults); 
     [soapResults setString:@""]; 
     elementFound = FALSE; 
    } 
} 

這裏是我解析內部

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <authorizePassengerByEmailResponse xmlns="http://tempuri.org/"> 
     <authorizePassengerByEmailResult>string</authorizePassengerByEmailResult> 
    </authorizePassengerByEmailResponse> 
    </soap:Body> 
</soap:Envelope> 

這裏串要麼是像「姓」或「未授權」的名稱。

有關爲什麼會發生這種情況的任何建議?

+0

後你試圖解析什麼。 –

+0

我已經添加了我解析的XML。 – raziiq

回答

2

這是正確的行爲。你看,你有4個標籤:

  1. <soap:Envelope...
  2. <soap:Body>
  3. <authorizePassengerByEmailResponse xmlns="http://tempuri.org/">
  4. <authorizePassengerByEmailResult>

所以每次解析器看到它調用didStartElement開放的標籤。

您將收到的來電下面的堆棧:

  • didStartElement: 「肥皂」
  • didStartElement: 「肥皂」
  • didStartElement: 「authorizePassengerByEmailResponse」
  • didStartElement: 「authorizePassengerByEmailResult」
  • didEndElement:「authorizePassengerByEmailResult」
  • didEndElement: 「authorizePassengerByEmailResponse」
  • didEndElement: 「肥皂」
  • didEndElement: 「肥皂」
+0

感謝您的清理。 – raziiq