Для большинства моих потребностей в синтаксическом анализе XML на iOS я использую свой класс CWXMLTranslator
, который доступен как открытый исходный код на https://github.com/jayway/CWFoundation.. Он использует небольшой DSL для перевода XML в объекты Objective-C.
В основном переворачивая XML, как это:
<foo code="42">
<name>Saturnus</name>
<next_url>http://apple.com</next_url>
</foo>
В объект домена, как это:
@interface Foo { }
@property(nonatomic, assign) NSInteger code;
@property(nonatomic, copy) NSString* name;
@property(nonatomic, retain) NSURL* nextURL;
@end
В нечто простое:
NSArray* response = [CWXMLTranslator translateContentsOfURL:fooURL
withTranslationNamed:@"FooRequest"
delegate:nil
error:NULL];
Где переводом будет файл с именем FooRequest.xmltranslation
, содержимое которого будет выглядеть примерно так:
foo +> @root : Foo {
.code >> code : NSNumber;
name >> name;
next_url >> nextURL : NSURL;
}
Это немного больше работы, чем «автоматические» инструменты в .net, но достаточно простые для обработки самых сложных SOAP или WCF.
Существует обширный CWXMLTranslatorDelegate
протокол для обработки выделенных более сложных случаев, а также странных преобразований типов.