这是我需要解析的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&amp;获取所需的消息对象。组名。
我把NSLog
打印出来但我总是得到空值。奇怪的是消息数组被分配内存&amp;还有元素被添加到数组中,因为我可以看到NSLog
中的消息数组计数,但数组元素的数据为空值。
我在NSURLConnection委托方法connectionDidFinishLoading
NSString *theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSLog(@"theXML: \n%@",theXML);
答案 0 :(得分:0)
您的didEnd方法缺少将累积的字符串存储到属性中的代码。您需要一个用于当前SCMessage对象的ivar。
将文本内容附加到可变字符串ivar。然后在关闭元素时,您必须决定在SCMessage上设置哪个属性。您可能必须将日期解析为NSDate。
答案 1 :(得分:0)
您需要将值存储在aMessage
中。您已将特定对象添加到数组但您忘记将数据存储在SCMessages类的该对象中。您还可以在调试时检查您是否在aMessage
对象中获得了值。
您需要在此didEndElement
方法中存储这样的值。
[aMessage setValue: soapResults forKey:elementName];
我认为这会对你有帮助。