2010-12-06 94 views
1

我想爲iPhone做一些簡單的XML解析。主要是爲了練習。我認爲XML非常簡單,我想學習如何將它與其他語言集成。在iPhone上解析XML

我用這個鏈接,就怎麼做XML解析的教程,但它是一點點進步了我的目的:/

是不存在的,不需要多行代碼的簡單方法做XML解析?

http://webcache.googleusercontent.com/search?q=cache:4S0UStrJP28J:gigaom.com/apple/tutorial-build-a-simple-rss-reader-for-iphone/+xml+parser+iphone&cd=3&hl=en&ct=clnk&client=safari

最好的問候!

克里斯蒂安

編輯:

我能夠實現我想這一點:

- (void)startParsing { 
    NSData *xmlData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.vegvesen.no/trafikk/xml/savedsearch.xml?id=604"]]; 
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    NSLog(@"Started %@", elementName); 
} 

這將只打印出的ElementName ......我應該怎麼走就從這裏開始從每個元素獲取價值?

+4

說「XML非常簡單」的人通常分爲兩類:完全理解XML的人,以及認爲他們完全理解XML的人。你屬於哪一個? – 2010-12-06 19:36:38

+0

可能是最後一個...... – 2010-12-06 19:42:40

回答

1

雖然這是很好的認識,在實踐中則可能是JSON

0

一個更容易的時間我想你必須做出一個模型類是這樣的:

進口

CarDetails.h

@interface CarDetails : NSObject 
{ 
    NSString *MapName; 
    NSString *MapContentName; 
    NSString *MapWidth; 
    NSString *MapHeight; 
} 

@property(retain,nonatomic)NSString *MapName; 
@property(retain,nonatomic)NSString *MapContentName; 
@property(retain,nonatomic)NSString *MapWidth; 
@property(retain,nonatomic)NSString *MapHeight; 

CarDetails.m

進口「CarDetai ls.h「

@implementation CarDetails

@synthesize MapName; @synthesize MapContentName; @synthesize MapWidth,MapHeight;

@end

看到這些是其中u全球存儲烏爾值模型對象,你可以從這裏使用的值

現在我們使用三種XML解析器代表

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"car"]){ 
    carDetails =[[carDetails alloc]init]; 
} 

} 


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 
{ 

if([elementName isEqualToString:@"title"]){ 
    car.mapName=nodecontent; 
} 
else if([elementName isEqualToString:@"link"]){ 
    car.MapContenName=nodecontent; 
} 

//finally when we reaches the end of tag i am adding data inside the NSMutableArray 
if([elementName isEqualToString:@"item"]){ 

    [rssOutputData addObject:car]; // adding the model class object to the array and then use this array to retrieve the values 
    [car release]; 
    car = nil; 
} 
//release the data from mutable string variable 
[nodecontent release]; 

//reallocate the memory to get new content data from file 
nodecontent=[[NSMutableString alloc]init]; 

} 
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

1)在didStart中,只有在foundCharacters中找到第一個節點 2)時,纔會分配模型類對象3)在didEndElement中,您將從foundCharacters中將數據分配給mo del object