「歐洲」和「美國」是您的標籤的屬性。屬性在標籤中定義爲「名稱」。你真的應該熟悉NSXMLParser
和它解析的事件驅動方法。基本上,你創建一個NSObject
子類作爲NSXMLParser
的代表,並且當它遇到元素時,它會調用你的自定義對象上的委託方法。這個非常簡單的XML是一個很好的例子。例如。
此代碼使用ARC。
SimpleExampleParse.h:
@interface SimpleExampleParse : NSObject <NSXMLParserDelegate>
@property (strong, nonatomic) NSMutableArray *continents;
-(id)initWithString:(NSString *)stringToParse;
@end
SimpleExampleParse.m:
#import "SimpleExampleParse.h"
@implementation SimpleExampleParse{
NSXMLParser *myParser;
}
@synthesize continents;
-(id)initWithString:(NSString *)stringToParse{
if ((self = [super init])){
myParser = [[NSXMLParser alloc] initWithData:[stringToParse dataUsingEncoding:NSUTF8StringEncoding]];
myParser.delegate = self;
self.continents = [[NSMutableArray alloc] init];
[myParser parse];
}
return self;
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
// Check to see if this element has an attribute "name".
NSString *name = [attributeDict objectForKey:@"name"];
// If name is not nil add it to our Array
if (name) [continents addObject:name];
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
// We don't care your XML contains no content
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
// We don't care your XML contains no content
}
@end
此類用於這樣的:
NSString *stringToParse = @"<continents><continent1 id=\"EUR\" name=\"EUROPE\"></continent1><continent2 id=\"AME\" name=\"AMERICA\"></continent2></continents>";
SimpleExampleParse *parser = [[SimpleExampleParse alloc] initWithString:stringToParse];
NSLog(@"contenents %@",parser.continents);
從日誌的輸出將是:
contenents (
EUROPE,
AMERICA
)
請現在你有一些工作在你面前,花點時間研究它並研究它是如何工作的。
你的問題是寬泛的;你需要更多的細節。你想把這個XML解析成什麼數據結構? 「我無法在同一時間顯示結果」是什麼意思?你需要怎樣處理結果?你試過什麼了? – NJones
我需要在iphone上顯示歐洲和美洲,如果我只用歐洲NSXMLParser解析它的作品,但我想看到歐洲和美國,我認爲這可能是更好使它與TouchXML,我不明白從不同的節點XML。 –