Не могу разобрать XML с NSXMLParser - PullRequest
0 голосов
/ 27 февраля 2012

Я получил приложение для iOS.Все данные хранятся в XML-файлах.

<?xml version="1.0" encoding="utf-8"?>
<objects>
    <object 
        name="Скульптура Р. Исмагилова «Пермяк – соленые уши»" 
        xcoord="58.00998487478568" 
        ycoord="56.239829063415527"
        type="" 
        description="" 
        external_name="gl1" />
</objects>

Итак, я хочу разобрать этот XML-файл в NSMutableArray

Я делаю это с NSXMLParser классом deleteagate.Это код класса:

@implementation XMLParser

@synthesize aPLace;

- (XMLParser *) initXMLParser {

    [super init];

    appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate];

    return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {

    NSLog(@"parsing");

    if([elementName isEqualToString:@"objects"]) {
        //Initialize the array.
        appDelegate.books = [[NSMutableArray alloc] init];
    }
    else if([elementName isEqualToString:@"object"]) {

        //Initialize the book.
        aPLace = [[Place alloc] init];

        //Extract the attribute here.
        aPLace.name = [[attributeDict objectForKey:@"name"] string];

        NSLog(@"Reading name :%@", aPLace.name);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"objects"])
        return;

    if([elementName isEqualToString:@"object"]) {
        [appDelegate.greenLine addObject:aPLace];
    }

}

@end

Вы можете видеть, что в didStartElement есть функция NSLog(@"parsing");.Но вывод пуст.

Итак, я реализую синтаксический анализ в функции AppDelegateClass's applicationDidFinishLaunching

- (void)applicationDidFinishLaunching:(UIApplication *)application {


    NSURL *url = [[NSURL alloc] initWithString:@"greenline_ru.xml"];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    //Initialize the delegate.
    XMLParser *parser = [[XMLParser alloc] initXMLParser];

    //Set delegate
    [xmlParser setDelegate:parser];

    //Start parsing the XML file.
    BOOL success = [xmlParser parse];

    if(success)
        NSLog(@"No Errors");
    else
        NSLog(@"Error Error Error!!!");

    // Configure and show the window
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
}

и каждый раз выводим Error Error Error!!! почему?В чем проблема?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012
NSURL *url = [[NSURL alloc] initWithString:@"greenline_ru.xml"];

Я думаю, что это твоя проблема. Если у вас есть файл, вы должны использовать что-то вроде

NSString *path = [[NSBundle mainBundle] pathForResource:@"greenline_ru"
                                                 ofType:@"xml"];
[[NSXMLParser alloc] initWithData:[NSData dataWithContentsOfFile:path]]
0 голосов
/ 27 февраля 2012

Используйте TBXML, это довольно просто ... Изучите это - http://www.tbxml.co.uk/TBXML/API.html

...