2010-12-31 15 views
0

xmlの解析に問題がありました。XMLの解析問題

<Root1> 
<example1 att1="data" att2="data2" att3="data"/> 
</Root1> 

xmlファイルの二:

は私が

例のXMLファイル最初の2つのXMLファイルを....得ました。

<Root2> 
<example2 att1="data"/> 
</Root2> 

私のプロジェクトでこの2つのxmlを解析する必要があります。

最初のxmlファイル 私はそのクラスのすべての属性を保持するFirstClass のクラスを作成しました。 例

class FirstClass 
{ 
NSString att1; 
NSString att2; 
NSString att3; 
} 

プロパティとシンセを指定します。

最初のxmlファイル用にFirstXMLParserを作成しました。

-(FirstXMLParser *)initXMLParser 
{ 
    [super init]; 
    appDelegate=(PartyTemperature_AppDelegate *)[[UIApplication sharedApplication]delegate]; 
    return self; 
} 

didartartlement とdidendelement。私はそれに取り組んだ... 私は完璧なXMLを解析しました....

私のFirstviewControllerで私は正常にXMLを解析しました。第二私はclassSecond

ClassSecond 
{ 
NSString att1; 
} 

セットのプロパティとシンセを作成しXMLParserSecond を作成するための

。私のSecondViewController私のアプリでは解析中SecondXMLParser

-(SecondXMLParser *)initDJXMLParser{ 

    [super init]; 
    appDelegate=(PartyTemperature_AppDelegate *)[[UIApplication sharedApplication]delegate]; 
    return self; 
} 

を作成し

がクラッシュします。私は何をすべきかを知らない

.....

私はあなたの人々が

私を助けてください私の問題を理解することができます願っています。

あなたは私は私のコードを投稿することができますしたい場合は、事前に......

@Thanks。

答えて

1

最善のアプローチは、FirstXMLParser(XML解析を実装することはNSXMLParserである)、SecondXMLParser(XML解析を実装することはNSXMLParser)で2番目のXMLデータを取得することです。 注:NSXMLParserを使用している場合は、両方のクラスで必要なデリゲートを取得してください。

各クラスはXMLデータを入力として受け取り、それを処理し、解析されたデータをメンバー変数に格納する必要があります。

これまでアプリケーションのモジュールがXMLコンテンツを解析する必要があったのは、それぞれのクラスオブジェクトのオブジェクトを使用して出力を取得します。

詳細が必要な場合は、コードとフローを共有してください。この説明が役立つことを願っています。

+0

コラリ..私はその作業私が何をしたか知っている...しかしないいけない...私はどのようにその作業を知りませんあまりにも。私は代理人を –

+0

に変更しました。私はあなたが間違った方法で代議員を設定したかもしれないと思います。 –

0

ソースコードxml parser firstとsecond。

#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 
+0

2つのxml解析用ソースコードを追加しました –