2012-05-17 2 views
-1

я хочу, чтобы разобрать XML как:Objective-C разбор объектов, содержащих объекты одного и того же типа в пределах

<users> 
    <user> 
    <userName>mspeller</userName> 
    <firstName>Mike</firstName> 
    <lastName>Speller</lastName> 
    <user> 
     <userName>mspeller</userName> 
     <firstName>Mike</firstName> 
     <lastName>Speller</lastName> 
    </user> 
    <user> 
     <userName>mspeller</userName> 
     <firstName>Mike</firstName> 
     <lastName>Speller</lastName> 
    </user> 
    ... 
    </user> 
    <user> 
    <userName>mgdan</userName> 
    <firstName>Mila</firstName> 
    <lastName>Gdan</lastName> 
    </user> 
    ... 
</users> 

нас вы видите, это XML содержат объекты // пользователь, который содержит другие пользователи, пожалуйста, помогите !

+1

Я думаю, что у него проблемы с разбором, потому что несколько пользователей вложены и хотят знать, как отслеживать состояние парсера ... но да, это не очень понятно. – 0xSina

ответ

1

Создать класс:

@interface User : NSObject 
@property (nonatomic,retain)NSString * firstName; 
@property (nonatomic,retain)NSString *lastName; 
@property (nonatomic,retain)User *secondaryUser; 

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

1

Не должно быть трудно разобрать это. Просто держите флаг BOOL и установите его в YES, когда вы находитесь на двух уровнях. Когда вы нажмете обратный вызов «didEndElement», если он установлен на «Да», это означает, что вы на два уровня глубоки и не настроили его на «НЕТ». В противном случае это означает, что вы находитесь на первом уровне.

Если есть произвольные уровни вложенных пользователей, то просто иметь int, который будет указывать на n-й уровень пользователя ... каждый раз, когда вы нажимаете «didStartElement», увеличивайте его. В «didEndElement» уменьшите его. Кроме того, вы, вероятно, нужна структура данных типа стека ...

* EDIT: * Это предполагает, что вы используете управляемый событиями парсер, как NSXMLParser ...

+0

ОК, я вижу, но, пожалуйста, у вас есть какой-либо учебник с NSXMLParser, xmlDigester или другим, который разбирает xml как это. –

+0

У Apple есть довольно приятное руководство по разбору с использованием NSXMLParser. Поиск «NSXMLParser» в google, это второй результат. – 0xSina

+0

link, пожалуйста, я не нахожу его .. –

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