我知道有幾種方法使用NSXMLParser,RaptureXML,TouchXML等來解析xml文件的數據,但是當我使用NSXMLParser方法時,它似乎是一個漫長的過程,因爲我們必須聲明字符串,數組等。我有一個xml文件,其中包含大約7個類別的說明,也有3個關卡,我的xml文件的格式如下format,它被複制到我的項目的支持文件文件夾中。我懇請請看一下它的理解。從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文件或字典等,通過它還可以實現代碼優化。
對不起,我想你沒有正確地解決我的問題,我的擔憂並不關注stor ing plist中的字典,它從XML文件中獲取數據:) –