Как мне проанализировать строку NSString, содержащую XML, в Objective-C? - PullRequest
8 голосов
/ 29 мая 2009

В моем приложении для iPhone у меня есть следующая строка NSString:

NSString *myxml=@"<students>
    <student><name>Raju</name><age>25</age><address>abcd</address> 
    </student></students>";

Как бы я проанализировал содержимое XML этой строки?

Ответы [ 5 ]

13 голосов
/ 14 июня 2011

Загрузка: https://github.com/bcaccinolo/XML-to-NSDictionary

Тогда вы просто делаете:

NSDictionary *dic = [XMLReader dictionaryForXMLString:myxml error:nil];

Результатом является NSDictionary * dic со словарями, массивами и строками внутри, в зависимости от XML:

{
    students =     {
        student =         {
            address = abcd;
            age = 25;
            name = Raju;
        };
    };
}
10 голосов
/ 29 мая 2009

Вы должны использовать класс NSXMLParser

Вот ссылка на документацию для этого класса: http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html

Ваш код должен выглядеть примерно так:

@implementation MyClass
- (void)startParsing {
    NSData *xmlData = (Get XML as NSData)
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease];
    [parser setDelegate:self];
    [parser parse];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    NSLog(@"Started %@", elementName);
}
2 голосов
/ 15 августа 2009

Другой ответ: не используйте XML. Вместо этого используйте plist, который написан с использованием XML, но легче разбирается в Objective-C в отдельные типы данных (например, NSArray имеет метод для преобразования файла или plD NSData в NSArray).

0 голосов
/ 07 мая 2011

Я думаю, что лучшим эквивалентом XMLDocument является AbacigilXQ Library . Вы должны посмотреть на это. Я использую это.

http://code.google.com/p/abacigilxq-library/

0 голосов
/ 20 января 2011

Как упомянуто @Jon Hess, просто создайте класс обертки для «необязательных» методов NSXMLParserDelegate. Эти методы помогают вам разделить задачи, которые могут оказаться полезными при разборе xml.

Один действительно хороший файл онлайн-журнала, который я нашел, это Элегантный синтаксический анализ XML с Objective-C . Фил Нэш действительно не торопился, чтобы показать основы вариантов синтаксического анализа в вашей досягаемости. Это может занять нового программиста и провести его / ее через всю установку.

Загрузка xml может быть модификацией метода @Jon Hess.

Вы можете настроить:

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

для обработки событий определенных элементов.

Также реализовать:

-(void)parser:(NSXMLParser *)parser 
foundCharacters:(NSString *)string {
}

для помещения найденных строк в коллекцию объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...