2011-11-15 27 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; 
    } 
} 

iが「姓」または「認証されていません」のような名前になりますいずれかの内部ここ

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個のタグを持って、見て:<authorizePassengerByEmailResult>

  1. <soap:Envelope...
  2. <soap:Body>
  3. <authorizePassengerByEmailResponse xmlns="http://tempuri.org/">
  4. だから毎回パーサーは、それがdidStartElement呼び出すオープンタグを見ました。

    あなたは、呼び出しの次のスタックを受け取ります:

    • didStartElement: "石鹸"
    • didStartElement: "石鹸"
    • didStartElement: "authorizePassengerByEmailResponse"
    • didStartElement: "authorizePassengerByEmailResult"
    • didEndElement: "authorizePassengerByEmailResult"
    • didEndElement: "authorizePassengerByEmailResponse"
    • didEndElement: "石鹸"
    • didEndElement:あなたが解析しようとしているまさに "石鹸"
+0

お返事ありがとうございます。 – raziiq

関連する問題