NSXMLParser, два одинаковых элемента Помогите!

Я пытаюсь проанализировать этот файл XML для школьного проекта: http://ax.itunes.apple.com/WebObjects/MZStoreServices.woa/ws/RSS/topsongs/limit=10/genre=20/xml.

Моя проблема в том, что я пытаюсь получить название альбома, которое находится здесь: <im:collection><im:name> здесь. Однако есть два элемента с именем <im:name>. Первый находится в <entry>, а второй - в <im:collection>.

Как я могу получить информацию от второго <im:name>?


person max_    schedule 28.12.2010    source источник
comment
Пожалуйста, отредактируйте свой вопрос, чтобы элементы с тегами действительно отображались в вопросе. что находится здесь: здесь. Однако есть два элемента, называемых . не очень полезно. Я бы отредактировал вопрос, если бы мог, но у меня пока нет таких привилегий.   -  person Philip Regan    schedule 29.12.2010
comment
@ Эван, спасибо. Я не привык к форматированию кода здесь! Кстати, это мой первый пост!   -  person max_    schedule 29.12.2010


Ответы (2)


Вы будете постоянно сталкиваться с проблемой XML, поскольку тег может появляться несколько раз в нескольких родительских элементах. Я отслеживаю это, отслеживая родительский тег. Итак, в подклассе NSXMLParser я поддерживаю два свойства:

NSString *currentTag;
NSString *parentTag;

В parser:didStartElement:namespaceURI:qualifiedName:attributes: я их заполняю:

parentTag = currentTag;
currentTag = elementName;

И в parser:foundCharacters: я заполняю свою модель данных в соответствии с родительским тегом, в котором я сейчас нахожусь...

if ([currentTag isEqualToString:@"im:name"]) {
    if ([parentTag isEqualToString:@"entry"]) {
        // do something
    } else if ([parentTag isEqualToString:@"im:collection"]) {
        // do something else
    }
}

Добавьте соль по вкусу.

person Philip Regan    schedule 28.12.2010

При любом синтаксическом анализе XML, который использует синтаксический анализатор извлечения (обрабатывает события тегов вместо просмотра DOM), вы должны где-то настроить какую-то переменную, которая отслеживает, где вы находитесь в документе, если вам нужны элементы, специфичные для поддерева дерева. XML, которые имеют то же имя, что и элементы в других поддеревьях.

В вашем случае, поскольку вы знаете, что хотите, чтобы имя было в коллекции, вам также нужно искать тег коллекции и отслеживать, когда вы вошли и оставили его, поэтому, когда вы приходите к тегу имени, вы обрабатываете его, только если вы также внутри коллекции.

person Kendall Helmstetter Gelner    schedule 28.12.2010