2010-12-31 3 views
0

У меня возникла проблема с разбором xml.Проблема с анализом XML

я получил два XML-файлы ....

Пример XML-файл первых:

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

XML файл вторых.

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

Мне нужно разобрать этот два xml в моем проекте.

для первого файла xml Я создал класс для FirstClass , который содержит все атрибуты этого класса. пример

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

дать собственность и синтезаторе.

Я создал FirstXMLParser для первого XML-файла.

-(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 в Advance.

ответ

1

Наилучший подход заключается в том, что для первых XML-данных в FirstXMLParser используется синтаксический анализатор XML (реализация XML-анализа может быть NSXMLParser), а затем второй XML-данные в SecondXMLParser (реализация XML-анализа может быть NSXMLParser). Примечание. Если вы используете NSXMLParser, тогда необходимо передать делегат в оба класса.

Каждый класс должен принимать XML-данные в качестве входных данных, затем обрабатывать их и хранить анализируемые данные в переменной-члене.

Каким бы модулем вашего приложения не было необходимости анализировать XML-контент, он использует объект соответствующего объекта класса и получает результат.

Если вам нужна дополнительная информация, пожалуйста, поделитесь мной с кодом и потоком --- Надеюсь, это объяснение поможет вам.

+0

Kolari .. я не знаю, что я сделал ... но не его работы ... я не знаю, как его рабочий слишком. я изменил tht делегат –

+0

Хорошо, хорошо знать, что он сработал. Я думаю, что вы, возможно, установили делегат неправильно. –

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

Я добавил свой исходный код для двух разборок xml –

Смежные вопросы