2010-01-13 4 views
0

У меня есть веб-сервис, который возвращает определенные «модели», из которых все определены классом в объективе-c. Вызовы методам RESTful возвращают либо сингулярную модель XML, либо список элементов модели XML.Шаблон для анализа XML в iPhone

<widget> 
    <a>foo</a> 
</widget> 

или

<widgets> 
<widget> 
    <a>foo</a> 
</widget> 
    .... 
<widget> 
    <a>foo</a> 
</widget> 
</widgets> 

Я пытаюсь придумать способ организовать свои занятия таким образом, чтобы синтаксический анализ объекта или список объектов, легко и в конечном счете добавить больше объектов модели легко. Очевидно, он будет включать делегата для каждой «модели», но как организовать его таким образом, чтобы он стал простым и элегантным. Делегат xml для каждого объекта модели? как обрабатывать списки? Возможно, какой-то тип объекта делегирования списка, который затем будет ссылаться на правильный делегат отдельной модели в соответствии с некоторым списком? (т. е. виджеты -> делегат виджета)

У меня будет один класс, который предоставляет все методы в веб-сервисе.

- (Widget *)getWidgetById: (int) id; 
- (some array) getWidgets:; 

Я предполагаю, что это действительно больше вопрос дизайна шаблона OO, чем что-либо еще.

ответ

1

Возможно, вы захотите ознакомиться с образцом кода Apple XMLPerformance. Вы можете использовать NSXMLParser или libxml, или просто свернуть свое собственное решение. Также см. XML parsing section из Data Management Coding How-To's.

+0

Хорошее предложение. Много хорошего кода в приложении XMLPerformance. –

1

Если бы я был вами, я бы настоятельно подумал, что сервер вернет либо JSON, либо PLIST.

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

В принципе, формула такова: вы получаете ответ от сервера, за один звонок переведите данные в NSDictionary или NSArray (обычно это массив NSDictionaries), а затем просто вытащите из них атрибуты в вашу модель данных.

+0

Спасибо за предложение. Кажется, что гораздо меньше работы, чем с парсером. Я проверю это. Самое приятное, что я должен иметь возможность возвращать оба формата, просто используя заголовок HTTP Accepts. Может стоить того. –

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

  • Нет связанных вопросов^_^