XML解析问题

时间:2010-12-31 09:37:42

标签: iphone

我在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。

2 个答案:

答案 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