4

AFNetworking ライブラリを使用して XML コンテンツを取得したいので、このコードを使用します

AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:request 
success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) 
{
    XMLParser.delegate = self;
    [XMLParser parse];
} 
failure:nil];
[operation start];

私の質問は、xml 応答のコンテンツを取得する方法があるかどうかを知ることです (xml コンテンツを NSLog で出力したい)

前もって感謝します

4

2 に答える 2

8

responseDataリクエストからの生データは、操作クラスのプロパティで常に利用できます。で表示する方法は次のNSLogとおりです。

__block AFXMLRequestOperation *operation = [AFXMLRequestOperation XMLParserRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://legalindexes.indoff.com/sitemap.xml"]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, NSXMLParser *XMLParser) {
    NSLog(@"Parser: %@", XMLParser);
    NSLog(@"Raw XML Data: %@", [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, NSXMLParser *XMLParser) {
    NSLog(@"Failure!");
}];

[operation start];

とは言っても、標準AFXMLRequestOperationクラスは使用NSXMLParserするのが面倒です。ペイロードが大きすぎず、パフォーマンスが問題にならない場合は、Mattt の新しいAFKissXMLRequestOperationクラスを使用することをお勧めします。これは、解析を行い、より使いやすいNSXMLDocument互換オブジェクトを公開します。

__block AFKissXMLRequestOperation *operation = [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://legalindexes.indoff.com/sitemap.xml"]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) {
    NSLog(@"XMLDocument: %@", XMLDocument);
    NSLog(@"Raw XML Data: %@", [[NSString alloc] initWithData:operation.responseData encoding:NSUTF8StringEncoding]);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) {
    NSLog(@"Failure!");
}];

[operation start];
于 2013-03-25T12:46:50.357 に答える
2

AFXMLRequestOperation は SAX 操作だと思います。つまり、xml 応答は一度に受信されません (完了するまで受信し続けます)。

印刷で受け取った完全なデータを印刷できますstring

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 

またはivarに文字列を追加して印刷しますparserDidEndDocument

- (void) parserDidEndDocument: (NSXMLParser *)parser

戻り値を確認するために API をテストしようとしている場合。私はこの方法を使用します

[[AFHTTPClient sharedClient] postPath:url
                              parameters:nil 
                                 success:^( AFHTTPRequestOperation *operation , id responseObject ) {
                                     NSLog(@"responseobject: %@", [responseObject description]);
                                     }
                                     failure:^( AFHTTPRequestOperation *operation , NSError *error ){
                                        NSLog(@"Handle failure for me");
                                     }
                                     ]];
于 2012-07-06T07:55:22.407 に答える