我在xml的解析中遇到了问题。
我有两个xml文件......
首先是示例xml文件:
<Root1>
<example1 att1="data" att2="data2" att3="data"/>
</Root1>
xml文件第二。
<Root2>
<example2 att1="data"/>
</Root2>
我需要在我的项目中解析这两个xml。
表示第一个xml文件 我为FirstClass创建了Class 它包含该类中的所有属性。 示例
class FirstClass
{
NSString att1;
NSString att2;
NSString att3;
}
给予属性和合成器。
我为第一个xml文件创建了FirstXMLParser。
-(FirstXMLParser *)initXMLParser
{
[super init];
appDelegate=(PartyTemperature_AppDelegate *)[[UIApplication sharedApplication]delegate];
return self;
}
didstartelement 和didendelement。我努力了...... 我解析了XML完美......
在我的FirstviewController中,我成功解析了xml。
第二次我创建了XMLParserSecond 我创建了classSecond
ClassSecond
{
NSString att1;
}
设置属性和合成器。
创建SecondXMLParser
-(SecondXMLParser *)initDJXMLParser{
[super init];
appDelegate=(PartyTemperature_AppDelegate *)[[UIApplication sharedApplication]delegate];
return self;
}
在我的SecondViewController中解析时,我的应用程序崩溃了。
我不知道该怎么办.....
我希望你的人能理解我的问题
请帮帮我。
如果你想我可以发布我的代码......
@Thanks in Advance。
答案 0 :(得分:1)
最好的方法是在FirstXMLParser中实现第一个XML数据的XML解析器(实现XML解析可能是NSXMLParser),然后在SecondXMLParser中实现第二个XML数据(实现XML解析可能是NSXMLParser)。 注意:如果您使用的是NSXMLParser,则在两个类中都需要委托代理。
每个类应该将XML数据作为输入,然后处理它并将解析后的数据存储在成员变量中。
您的应用程序需要解析XML内容的哪个模块使用相应类对象的对象并获取输出。
如果您需要更多详细信息,请与我分享您的代码和流程---我希望这些解释可以帮助您。
答案 1 :(得分:0)
源代码。 xml解析器第一和第二。
#import <Foundation/Foundation.h>
@class EventInfo;
@class DistanceInfo;
@class PartyTemperature_AppDelegate;
@protocol NSXMLParserDelegate;
@interface XMLParser : NSObject <NSXMLParserDelegate>{
EventInfo *aEventInfo;
DistanceInfo *aDistanceInfo;
PartyTemperature_AppDelegate *appDelegate;
}
-(XMLParser *)initXMLParser;
@end
//实施档案
#import "XMLParser.h"
#import "EventInfo.h"
#import "PartyTemperature_AppDelegate.h"
#import "DistanceInfo.h"
@implementation XMLParser
-(XMLParser *)initXMLParser
{
[super init];
appDelegate=(PartyTemperature_AppDelegate *)[[UIApplication sharedApplication]delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"root"]) {
appDelegate.distanceListArray=[[NSMutableArray alloc]init];
}
if ([elementName isEqualToString:@"events"]) {
aDistanceInfo=[[DistanceInfo alloc] init];
aDistanceInfo.eventListArray=[[NSMutableArray alloc]init];
aDistanceInfo.event_Distance=[attributeDict objectForKey:@"distance"];
}
if ([elementName isEqualToString:@"event"]) {
aEventInfo=[[EventInfo alloc]init];
aEventInfo.event_ID=[attributeDict objectForKey:@"id"];
aEventInfo.event_Title=[attributeDict objectForKey:@"title"];
aEventInfo.event_Description=[attributeDict objectForKey:@"description"];
aEventInfo.event_Date=[attributeDict objectForKey:@"date"];
aEventInfo.event_Time=[attributeDict objectForKey:@"time"];
aEventInfo.event_Location=[attributeDict objectForKey:@"location"];
aEventInfo.event_Street=[attributeDict objectForKey:@"street"];
aEventInfo.event_City=[attributeDict objectForKey:@"city"];
aEventInfo.event_Visitors=[attributeDict objectForKey:@"visitors"];
aEventInfo.event_Organisation=[attributeDict objectForKey:@"organisation"];
aEventInfo.event_Price=[attributeDict objectForKey:@"price"];
aEventInfo.event_Minimum_Age=[attributeDict objectForKey:@"minimum_age"];
aEventInfo.event_Picture=[attributeDict objectForKey:@"picture"];
aEventInfo.event_Genre=[attributeDict objectForKey:@"genre"];
aEventInfo.event_LineUP=[attributeDict objectForKey:@"lineup"];
aEventInfo.event_WebSite=[attributeDict objectForKey:@"website"];
aEventInfo.event_latitude=[attributeDict objectForKey:@"latitude"];
aEventInfo.event_longitude=[attributeDict objectForKey:@"longitude"];
aEventInfo.event_distance=[attributeDict objectForKey:@"distance"];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"root"]) {
return;
}
if ([elementName isEqualToString:@"events"]) {
[appDelegate.distanceListArray addObject:aDistanceInfo];
NSLog(@"appDelegate.distanceListArray %d",[appDelegate.distanceListArray count]);
}
if ([elementName isEqualToString:@"event"]) {
[aDistanceInfo.eventListArray addObject:aEventInfo];
}
NSLog(@"aDistanceInfo.eventListArray information %d",[aDistanceInfo.eventListArray count]);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
return;
}
SecondXMLParser
#import <Foundation/Foundation.h>
@protocol NSXMLParserDelegate;
@class DJInfo;
@class NearbyViewController;
@interface DJXMLParser : NSObject <NSXMLParserDelegate>{
DJInfo *aDJInfo;
NearbyViewController *aNearbyViewController;
}
-(DJXMLParser *)initDJXMLParser;
@end
#import "DJXMLParser.h"
#import "DJInfo.h"
#import "PartyTemperature_AppDelegate.h"
#import "NearbyViewController.h"
@implementation DJXMLParser
-(DJXMLParser *)initDJXMLParser{
[super init];
aNearbyViewController=(NearbyViewController *)[[UIApplication sharedApplication]delegate];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"root"]) {
aNearbyViewController.djListArray=[[NSMutableArray alloc] init];
}
if ([elementName isEqualToString:@"dj"]) {
aDJInfo=[[DJInfo alloc] init];
aDJInfo.dj_Name=[attributeDict objectForKey:@"name"];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"root"]) {
return;
}
if ([elementName isEqualToString:@"dj"]) {
[aNearbyViewController.djListArray addObject:aDJInfo];
}
NSLog(@"aDJInfo.Value %@",[aNearbyViewController.djListArray count]);
}
@end