2

私は自分のアプリで webService 応答 (XML) を解析していましたが、すべての回答が解析されているわけではないことに気付きました (同じ情報のブロックが少なくとも 3 つ以上あると予想していました)。そのため、メソッド connectionDidFinishLoading を次のように変更することにしました。

-(void) connectionDidFinishLoading:(NSURLConnection *) connection {
    NSString *XMLResponse = [[NSString alloc]initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];

    NSLog(@"xml message: %@, data length: %i", XMLResponse, [webData length]);

    if ([XMLResponse hasPrefix:@"[ERR]"]){
        [[[UIAlertView alloc]initWithTitle:@"Notification"
                                   message:XMLResponse != nil ? [@"there was an error while trying to load service" stringByAppendingString:XMLResponse]: @"there was an error while trying to load service"
                                  delegate:self
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil]show];
        _transacWebServCompleto = @"FALSE";
        return;
    }

    xmlParser = [[NSXMLParser alloc] initWithData:webData];
    [xmlParser setDelegate:self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];
}

アプリを実行すると、出力セクションでこれを取得します

xml message: (null), data length: 5516

テーブルは正しく印刷されますが、完全ではなく、XML は null として表示されますが、データ長のためにデータが含まれています。

前もって感謝します

4

1 に答える 1

2

XML には、アクセント付きの単語などの特殊文字が含まれている場合があります。これを試してください。

-(void) connectionDidFinishLoading:(NSURLConnection *) connection {
    NSString *XMLResponse = [[NSString alloc]initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSISOLatin1StringEncoding];

    NSLog(@"xml message: %@, data length: %i", XMLResponse, [webData length]);

    if ([XMLResponse hasPrefix:@"[ERR]"]){
        [[[UIAlertView alloc]initWithTitle:@"Notification"
                                   message:XMLResponse != nil ? [@"there was an error while trying to load service" stringByAppendingString:XMLResponse]: @"there was an error while trying to load service"
                                  delegate:self
                         cancelButtonTitle:@"OK"
                         otherButtonTitles:nil]show];
        _transacWebServCompleto = @"FALSE";
        return;
    }

    xmlParser = [[NSXMLParser alloc] initWithData:[XMLResponse dataUsingEncoding:NSUTF8StringEncoding]];
    [xmlParser setDelegate:self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];
}

私がしたことはすべて:

  1. NSString (XMLResponse) を取得し、エンコーディングを NSISOLatin1StringEncoding に変更します
  2. NSString (XMLResponse) を使用して NSData オブジェクトを 1 ステップで作成することにより、NSXMLParser オブジェクト (解析) を初期化しますが、NSUTF8StringEncoding でエンコードするようになりました

試してみて、どうだったか教えてください!

于 2013-08-22T01:06:28.797 に答える