2010-12-31 4 views
0

xml의 구문 분석에 문제가 있습니다.XML의 구문 분석 문제

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

XML 파일의 두 번째 :

나는

예를 XML 파일 처음 두 XML 파일을 .... 얻었다.

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

내 프로젝트에서이 두 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; 
} 

didstartelement 및 didendelement. 나는 그 일을했습니다 ... XML을 완벽하게 구문 분석했습니다 ....

내 FirstviewController에서 나는 XML을 성공적으로 파싱했습니다. 위한

번째 제가

ClassSecond 
{ 
NSString att1; 
} 

세트 속성 신스 classSecond

생성 XMLParserSecond 을 만들었다. 내 SecondViewController 내 응용 프로그램에서 구문 분석하는 동안 SecondXMLParser

-(SecondXMLParser *)initDJXMLParser{ 

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

을 만든

가 추락 얻을. 내가 무엇을 잘 모릅니다

.....

난 당신의 사람들이

나를 제발 도와주세요 내 문제를 이해할 수 있기를 바랍니다. 당신은 내가 내 코드를 게시 할 수 원하는 경우

...... 사전에

@Thanks

.

답변

1

가장 좋은 방법은 FirstXMLParser (XML 구문 분석 구현은 NSXMLParser 일 수 있음)에서 Second XMLParser (XML 구문 분석 구현은 NSXMLParser 일 수 있음)의 첫 번째 XML 데이터에 대한 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 파싱을위한 내 소스 코드를 추가했습니다. –