XML Parser: проблемы с Apple XML - PullRequest
0 голосов
/ 04 июля 2011

Я использую этот XML-файл: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/toppaidapplications/limit=10/xml

с apple.com/rss и использую классический код для его анализа ...

Первая странная вещь, когда я регистрирую это:

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

NSLog(@"string : %@",string);

if (!currentElementValue) {
    // init the ad hoc string with the value     
    currentElementValue = [[NSMutableString alloc] initWithString:string];
} else {
    // append value to the ad hoc string
    [currentElementValue appendString:string];

}

}

Я получил некоторые элементы HTML!Но FireFox отображает полный XML-документ, когда вы смотрите на код страницы!

Затем ... когда я пытаюсь получить некоторую информацию из любого тега, я добавляю много пробелов и элемента новой строки перед ожидаемымзначение ...

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



    // Check tag name

    if ([elementName isEqualToString:@"title"]) {
        NSString *trimmedString = [currentElementValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        [currentElementValue setString:trimmedString];
        NSLog(@" title: %@",currentElementValue);
        [app setAppName:currentElementValue];
    }


    // Check tag
    if ([elementName isEqualToString:@"entry"]) {

        [apps addObject:app];

        // release user object
        [app release];
        app = nil;

    }


    [currentElementValue release];
    currentElementValue = nil;

}

Возврат, например:

title:

                Angry Birds - Clickgamer.com

Я уже использовал этот класс синтаксического анализатора с другими XMLфайлы и это работало, но теперь с файлом Apple XML это не ... почему?

1 Ответ

2 голосов
/ 04 июля 2011

Если перед желаемым содержимым много свободного пространства из-за способа создания XML, вы можете его обрезать, прежде чем использовать,

   ....
if ([elementName isEqualToString:@"title"]) {
    NSString * trimmedString = [currentElementValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    NSLog(@" title: %@",trimmedString);
    [app setAppName:trimmedString];
}
   ....


Что касается вашего вопроса о parser:foundCharacters:, the documentation утверждает это,

Отправлено объектом синтаксического анализа, чтобы предоставить его делегировать со строкой, представляющей все или часть персонажей текущий элемент.

Так что не стоит ожидать, что он напечатает весь XML. Это даст вам кусочки этого.

...