我有一個應用程序,我使用nsxmlparser來解析XML。但我沒有XML文件。我有一個生成XML文件的API方法。我在控制檯中生成了xml文件。但問題是我不知道如何解析API方法。我寫了下面的代碼,但它不會產生輸出。如何在iPhone中使用API方法解析XML文件?
TWeatherElement.h
//This is my element class .
#import <Foundation/Foundation.h>
@interface TWeatherElement : NSObject
{
NSString *mIcon;
NSString *mCurrentdate;
NSString *mConditionname;
NSString *mMintemp;
NSString *mMaxtemp;
NSString *mWind;
NSString *mHumidity;
}
@property (nonatomic,retain) NSString *icon;
@property (nonatomic, retain)NSString *currentdate;
@property (nonatomic,retain)NSString *conditionname;
@property (nonatomic,retain)NSString *mintemp;
@property (nonatomic, retain)NSString *maxtemp;
@property (nonatomic, retain)NSString *wind;
@property (nonatomic, retain)NSString *humidity;
@end
TWeatherElement.m
#import "TWeatherElement.h"
@implementation TWeatherElement
@synthesize icon = mIcon;
@synthesize currentdate = mCurrentdate;
@synthesize conditionname = mConditionname;
@synthesize mintemp = mMintemp;
@synthesize maxtemp = mMaxtemp;
@synthesize wind = mWind;
@synthesize humidity = mHumidity;
-(void)dealloc
{
[mIcon release];
//[mForecastdate release];
[mCurrentdate release];
[mConditionname release];
[mMintemp release];
[mMaxtemp release];
[mWind release];
[mHumidity release];
[super dealloc];
}
@end
TWeatherParser.h
//TWeatherParser is my parser class
#import "TWeatherElement.h"
#import <Foundation/Foundation.h>
@interface TWeatherParser : NSObject<NSXMLParserDelegate>
{
NSMutableArray *mParserArray;
NSXMLParser *mXmlParser;
NSMutableString *mCurrentElement;
BOOL elementFound;
TWeatherElement *mWeather;
}
@property (nonatomic, retain) NSMutableString *currentElement;
@property (nonatomic, retain) TWeatherElement *weatherobj;
-(void)getInitialiseWithData:(NSData *)inData;
@end
TWeatherParser.m
#import "TWeatherParser.h"
#import "JourneyAppDelegate.h"
//#define kParsingFinishedNotification @"ParsingFinishedNotification"
@implementation TWeatherParser
@synthesize weatherobj = mWeatherobj;
@synthesize currentElement = mCurrentElement;
-(void)getInitialiseWithData:(NSData *)inData
{
mWeather = [[TWeather alloc]init];
[mParserArray removeAllObjects];
NSBundle* bundle = [NSBundle mainBundle];
//This is to get to the path of the xml file named contact_data, but
//my problem is I don't have an XML file. My XML file is generated
//through an API method, [(NSString *)getBusXMLAtStop:(NSString*)stopnumber]
What should I write here so that I can parse my XML file which
is retrieving through the above below API method?
}
API METHOD:
-(NSString *)getBusXMLAtStop:(NSString*)stopnumber
{
NSError *error;
NSURLResponse *response;
NSData *dataReply;
NSString *stringReply;
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: [NSString stringWithFormat:@"http://www.google.com/ig/api?weather=,,,50500000,30500000",stopnumber]]];
[request setHTTPMethod: @"GET"];
dataReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//NSString *str;
stringReply = [[NSString alloc] initWithData:dataReply encoding:NSUTF8StringEncoding];
NSLog(@"%@",stringReply);
return stringReply;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString*) elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString*)qualifiedName attribute:(NSDictionary*)attributeDict
{
if (nil!= qualifiedName)
{
elementName = qualifiedName;
}
if ([elementName isEqualToString:@"weather"])
{
self.weatherobj = [[TWeatherElement alloc]init];
}
else if([elementName isEqualToString:@"current_date_time data"]||
[elementName isEqualToString:@"condition data"]||
[elementName isEqualToString:@"humidity data"]||
[elementName isEqualToString:@"icon data"]||
[elementName isEqualToString:@"wind_condition data"]||
[elementName isEqualToString:@"low data"]||
[elementName isEqualToString:@"high data"])
{
self.currentElement = [NSMutableString string];
}
else
{
self.currentElement = nil;
}
}
-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string
{
if (nil!= self.currentElement)
{
[self.currentElement appendString:string];
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qName
{
if (nil != qName)
{
elementName = qName;
}
if ([elementName isEqualToString:@"current_date_time data"])
{
self.weatherobj.currentdate = self.currentElement;
}
else if ([elementName isEqualToString:@"condition data"])
{
self.weatherobj.conditionname = self.currentElement;
}
else if ([elementName isEqualToString:@"humidity data"])
{
self.weatherobj.humidity = self.currentElement;
}
else if ([elementName isEqualToString:@"icon data"])
{
self.weatherobj.icon = self.currentElement;
}
else if ([elementName isEqualToString:@"wind_condition data"])
{
self.weatherobj.wind = self.currentElement;
}
else if ([elementName isEqualToString:@"low data"])
{
self.weatherobj.mintemp = self.currentElement;
}
else if ([elementName isEqualToString:@"high data"])
{
self.weatherobj.maxtemp = self.currentElement;
}
else if ([elementName isEqualToString:@"weather"])
{
[mParserArray addObject:self.weatherobj];
NSLog(@"mDataArray count = %d",[mParserArray count]);
[self.weatherobj release];
}
}
-(void)dealloc
{
self.weatherobj = nil;
self.currentElement = nil;
[super dealloc];
}
@end
如何調用API方法在getInitialiseWithData
函數,這樣我可以解析我的XML文件?
從API獲取包含XML的字符串並傳遞字符串而不是文件 – Radu 2011-05-25 07:03:46