Я хочу проверить номер версии данных в моем XML, и если номер версии XML более новый, чем текущая версия пользователя (сохраненная в NSUserDefaults), XML анализируется и вставляется в хранилище SQLite, в противном случае синтаксический анализ останавливается и ничего случается.
У меня есть часть разбора и хранения, но я не могу понять, как остановить разбор XML после начала.
Мой XML выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<DBName.sqlite>
<data version="1">
<rows>
<row>
<someInt>0</someInt>
<someString>Howdy</someString>
<rowVersion>0</rowVersion>
</row>
...
</rows>
</data>
</DBName.sqlite>
Итак, я пытаюсь остановить NSXMLParser, если ранее сохраненный dataversionCode пользователя == dataversionCode XML.
Мой метод разбора выглядит так:
- (BOOL)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error {
BOOL result = YES;
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
[parser setDelegate:nil];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
NSError *parseError = [parser parserError];
if (parseError && error) {
*error = parseError;
result = NO;
}
[parser release];
return result;
}
Любая помощь приветствуется. LQ
Я нашел решение, благодаря толчку Роба Нейпира:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if (qName) {
elementName = qName;
}
if ([elementName isEqualToString:@"data"]) {
int dataVersion = [[attributeDict objectForKey:@"version"] intValue];
// Match dataVersion with whatever desired value
if (dataVersion <= someValue) {
[parser abortParsing];
}
}
. . .
}