Использование NSXMLParser для анализа базового объекта данных - PullRequest
0 голосов
/ 16 декабря 2011

Мой XML-файл похож на следующий:

<title>some text
<Dog>founded characters to parse</Dog>
</title>

Я использовал функцию:

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

для распознавания тегов, но я хочу отправить текст между тегами на мой NSManagedObject например:

if([elementName isEqualToString:@"title"])
{
    [currentTitle setTitle:???????????];
}

Я знаю, что есть функция:

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

Но я не уверен, как использовать его для правильного Объекта.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Ваш XML неверен, поэтому я приведу пример с чем-то вроде этого:

<title>
    <Text>some text</Text>
    <Dog>founded characters to parse</Dog>
</title>

Вам нужно реализовать три метода делегата, и вы захотите создать переменную для хранениятекст в том виде, в котором он обнаружен:

Заголовок

@property (nonatomic, retain) NSMutableString *currentValue;

Реализация

- (id) init 
{    
    if( (self = [super init]) ) 
    {
        NSMutableString *value = [[NSMutableString alloc] initWithCapacity:500];
        self.currentValue = value;
        [value release];   
    }
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
                                         namespaceURI:(NSString *)namespaceURI 
                                        qualifiedName:(NSString *)qName 
                                           attributes:(NSDictionary *)attributeDict 
{    
    [self.currentValue setString:@""]; // Clear your string at the start of each tag   
}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{    
    [self.propertyValue appendString:string]; // append characters, this can be called multiple times
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
                                       namespaceURI:(NSString *)namespaceURI 
                                      qualifiedName:(NSString *)qName 
{    
    NSString *value = [self.propertyValue stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    if( [elementName isEqualToString:@"dog"] ) {
        dog.someProperty = value;
        return;
    }   

    if( [elementName isEqualToString:@"text"] ) {
        currentTitle.title = value;
        return;
    }
}

Таким образом, вам необходимо реализовать didStart, foundCharacters и didEnd.На didStart вы обрабатываете создание любых объектов-значений в зависимости от того, какой тег вы найдете.Найденные символы обычно всегда реализуются одинаково, вы просто добавляете их ... вы также можете применить любое форматирование, если хотите.Конец - это то, где вы сохраняете свои объекты ценности и освобождаете любые ресурсы.Я надеюсь, что это поможет вам, это все часть протокола NSXMLParserDelegate:

http://developer.apple.com/library/ios/#documentation/cocoa/reference/NSXMLParserDelegate_Protocol/Reference/Reference.html

0 голосов
/ 16 декабря 2011

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string является ключом.По сути, вы будете управлять переменной NSMutableString, которая будет заполнена значениями.Затем в -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName вы будете устанавливать свои свойства со значением.

Вот более подробный взгляд на этот процесс.

...