2012-01-24 78 views
-1

我有這個XML文件:解析該文件的XML與touchXML

<continents> 
    <continent1 id="EUR" name="EUROPE"></continent1> 
    <continent2 id="AME" name="AMERICA"></continent2> 
</continents> 

我試着用的NSXMLParser做,但我不能顯示在同一時間的結果,我會touchXML有人可以幫我試試? 謝謝。

+2

你的問題是寬泛的;你需要更多的細節。你想把這個XML解析成什麼數據結構? 「我無法在同一時間顯示結果」是什麼意思?你需要怎樣處理結果?你試過什麼了? – NJones

+0

我需要在iphone上顯示歐洲和美洲,如果我只用歐洲NSXMLParser解析它的作品,但我想看到歐洲和美國,我認爲這可能是更好使它與TouchXML,我不明白從不同的節點XML。 –

回答

1

「歐洲」和「美國」是您的標籤的屬性。屬性在標籤中定義爲「名稱」。你真的應該熟悉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 
) 

現在你有一些工作在你面前,花點時間研究它並研究它是如何工作的。