我想检查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>
所以我要做的就是在用户以前存储的dataversionCode == XML dataversionCode时停止NSXMLParser。
我的解析方法如下所示:
- (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
我找到了一个解决方案,感谢Rob Napier的轻推:
- (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];
}
}
. . .
}
答案 0 :(得分:4)
实施委托(无论如何你都需要)。在委托中,当您解析版本不符合要求时,请调用[parser abortParsing]
。