これは、解析する必要がある XML データです
<GetMessagesResult>
<NewDataSet xmlns="">
<Table>
<Date>21:52:59</Date>
<Message>ABC</Message>
<GroupName>ALL</GroupName>
</Table>
<Table>
<Date>11:23:27</Date>
<Message>DEF</Message>
<GroupName>ALL</GroupName>
</Table>
</NewDataSet>
</GetMessagesResult>
これは私の SCMessages.h ファイルです
#import <Foundation/Foundation.h>
@interface SCMessages : NSObject
{
NSDate *Date;
NSString *Message;
NSString *GroupName;
}
@property (nonatomic, retain) NSDate *Date;
@property (nonatomic, retain) NSString *Message;
@property (nonatomic, retain) NSString *GroupName;
これが私の SCMessages.m ファイルです
#import "SCMessages.h"
@implementation SCMessages
@synthesize Date;
@synthesize Message,GroupName;
- (void)dealloc
{
[super dealloc];
[Date release];
[Message release];
[GroupName release];
}
@end
以下のコードを使用して、NSXMLParser
デリゲート メソッドを使用してデータを解析しました
#pragma mark - NSXMLParser Delegate
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary *)attributeDict
{
if( [elementName isEqualToString:@"GetMessagesResult"])
{
if(!soapResults)
soapResults = [[NSMutableString alloc] init];
recordResults = TRUE;
}
if([elementName isEqualToString:@"NewDataSet"]) {
//Initialize the array.
messages = [[NSMutableArray alloc] init];
}
else if([elementName isEqualToString:@"Table"]) {
//Initialize the message.
aMessage = [[SCMessages alloc] init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if( recordResults )
[soapResults appendString: string];
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"Table"]) {
[messages addObject:aMessage];
NSLog(@"MESSAGES COUNT: %d",messages.count);
NSLog(@"MESSAGE: %@",aMessage);
[aMessage release];
aMessage = nil;
}
// as this is the last element
if( [elementName isEqualToString:@"NewDataSet"])
{
recordResults = FALSE;
}
}
問題 Date、 Meesage 、および GroupName を使用して目的のメッセージ オブジェクトを取得できません。
私はNSLog
それらを印刷しましたが、常に null 値を取得します。奇妙なことは、メッセージ配列が割り当てられたメモリを取得し、メッセージ配列のカウントを確認できるように要素が配列に追加されることですNSLog
が、配列要素には null 値としてデータがあります。
NSURLConnection デリゲート メソッドで SOAP 応答で受信した XML データを解析していますconnectionDidFinishLoading
NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSLog(@"theXML: \n%@",theXML);