Как получить параметры тегов с помощью NSXMLParser в Objective-C?

В структуре XML я имею:

 <font fontsize="10" fontcolor="#000000" fontface="file.ttf"/> 

Как получить шрифт, цвет и лицо с помощью NSXMLParser ? Конечно, у меня стандартная реализация

 -(id)init { self = [super init]; parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"myxmlfile" ofType:@"xml"]]]; [parser setDelegate:self]; [parser parse]; return self; } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { NSLog(@"Started Element %@", elementName); element = [NSMutableString string]; } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"Found an element named: %@ with a value of: %@", elementName, element); } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if (element == nil) element = [[NSMutableString alloc] init]; [element appendString:string]; } 

И он прекрасно работает для <mytag>something</mytag> . Как получить атрибуты тегов?

Ваш attributeDictionary из

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 

содержит их. Просто назовите [atrributeDict objectForKey:@"fontColor"] например

В протоколе NSXMLParserDelegate есть- – parser:foundAttributeDeclarationWithName:forElement:type:defaultValue: метод, который использует синтаксический анализатор, чтобы сообщить делегату об каждом атрибуте. Внесите этот метод в свой делегат, и вы получите атрибуты.

Используйте xpathQuery .. Это самое простое и быстрое решение для синтаксического анализа XML. Это решит вашу проблему .. вот ссылка ..

http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html

BTW: для части «запрос» вам нужно поставить // для корневого элемента, например // // // // для внутренней иерархии.