我知道有几种方法可以使用 NSXMLParser、RaptureXML、TouchXML 等来解析 xml 文件的数据,但是当我使用 NSXMLParser 方法时,这似乎是一个漫长的过程,因为我们必须声明字符串、数组等。我有一个大约 7 个类别的 xml 文件,也有 3 个级别,我的 xml 文件具有以下格式,它被复制到我的项目的支持文件夹中。我恳请您看一看以了解情况。
我有大约 21 个标签,我需要从每个类别中获取数据,这意味着我需要声明大约 21 个数组、单独的字符串等,如果我没有错的话!
我试图从一类动物中获取数据,动物一级。但我观察到数组中没有数据,我不知道如何从这里继续:
-(void)parseAndFetchWords
{
self.animalsWordsArray = [NSMutableArray array];
NSString *xmlFilePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"strings" ofType:@"xml"];
NSURL *xmlLocationURL = [NSURL URLWithString:xmlFilePath];
self.parser = [[NSXMLParser alloc] initWithContentsOfURL:xmlLocationURL];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
}
#pragma mark - Parser Delegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
currentElement = nil;
currentElement = [elementName copy];
if ([elementName isEqualToString:@"animalLevelOne"])
{
self.animalName = [NSMutableString string];
self.animalHint = [NSMutableString string];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];
if ([currentElement isEqualToString:@"animalLevelOne"])
{
[animalName appendString:string];
}
else if ([currentElement isEqualToString:@"animalLevelOne"])
{
[animalHint appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"animalLevelOne"])
{
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:animalName forKey:@"animalName"];
[dictionary setObject:animalHint forKey:@"animalHint"];
//And finally
[self.animalsWordsArray addObject:dictionary];
}
}
有人可以建议一种更好更简单的从xml获取数据的方法,可能不需要解析,比如将xml转换为plist文件或字典等,通过它也可以实现代码优化。