我有這個相當複雜的XML從我的服務器返回,我想要一些幫助將它解析成一個對象,我可以爲以後使用。使用NSXMLParser解析複雜的XML結構
這是XML的樣子
<Eng>
<Result >
<Series >
<Link/>
<FMF/>
<AlsoLink/>
<Plugins/>
</FMF>
<Sheet >
<Spaces>
<Spacing >
<Names/>
</Spacing>
<Spacing >
<Names/>
</Spacing>
</Spaces>
</Sheet>
</Series>
</Result>
</Eng>
我然後使用的NSXMLParser,試圖解析所有的XML各元素的「ObjectForKey /秒」到自己的dictionarys ..如果讓感。
這是我的代碼,目前看起來像
#pragma mark - Parsing lifecycle
- (void)startTheParsingProcess:(NSData *)parserData
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process
[parser setDelegate:self];
[parser parse]; // starts the event-driven parsing operation.
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"Series"]){
parsedMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict];
self.parsedDataArrayOfDictionaries = [NSMutableArray arrayWithCapacity:8];
if ([elementName isEqualToString:@"Link"]) {
}
if ([elementName isEqualToString:@"FMF"]) {
if ([elementName isEqualToString:@"AlsoLink"]) {
}
else if ([elementName isEqualToString:@"Plugins"]) {
}
}
else if ([elementName isEqualToString:@"Sheet"]) {
if ([elementName isEqualToString:@"Spaces"]) {
if ([elementName isEqualToString:@"Spacing"]) {
if ([elementName isEqualToString:@"Names"]) {
}
}
}
}
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"Series"]){
[parsedDataArrayOfDictionaries addObject:parsedMutableDictionary];
if ([elementName isEqualToString:@"Link"]) {
}
if ([elementName isEqualToString:@"FMF"]) {
if ([elementName isEqualToString:@"AlsoLink"]) {
}
else if ([elementName isEqualToString:@"Plugins"]) {
}
}
else if ([elementName isEqualToString:@"Sheet"]) {
if ([elementName isEqualToString:@"Spaces"]) {
if ([elementName isEqualToString:@"Spacing"]) {
if ([elementName isEqualToString:@"Names"]) {
}
}
}
}
}
// parsedMutableDictionary = nil;
}
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
NSLog(@"Paser Error = %@", parseError);
UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"A parsing failure occurred." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[errorAlert show];
}
//TODO: Look into how to use this method over multiple views. i.e.(other requests such as keycode, advanced)
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
// display values
NSArray *filteredArray = parsedDataArrayOfDictionaries;
NSLog(@"%@", filteredArray);
}
我遇到的問題是,我不明白我應該有自己的對象...也當一些值回我可以有多個間距元素,我只是不知道如何處理...
任何幫助或提示將非常感激,如果我沒有指定的東西只是問,因爲我的大腦只是努力圍繞這個問題。
謝謝。
我不確定這是否有幫助,但是,我只是把它扔到那裏,希望不會被拒絕投票 - 但是,無論如何,您可以將數據的輸出從XML更改爲JSON嗎?解析JSON是一個簡單的XML編輯器。 – Jordan 2013-03-20 20:59:44
不幸的是,我不得不處理我所給的感謝評論。 – HurkNburkS 2013-03-20 21:22:40