Objective c iPhone上的XML解析
我想为iPhone做一些简单的XML解析。主要是为了练习。我认为XML非常简单,我想学习如何将它与其他语言集成 我将此链接用于关于如何进行XML解析的教程,但就我的目的而言,它有点高级:/ 难道没有一种简单的方法不需要很多行代码来进行XML解析吗 致以最良好的祝愿 克里斯蒂安 编辑: 我能够通过以下方式实现我想要的:Objective c iPhone上的XML解析,objective-c,xml-parsing,Objective C,Xml Parsing,我想为iPhone做一些简单的XML解析。主要是为了练习。我认为XML非常简单,我想学习如何将它与其他语言集成 我将此链接用于关于如何进行XML解析的教程,但就我的目的而言,它有点高级:/ 难道没有一种简单的方法不需要很多行代码来进行XML解析吗 致以最良好的祝愿 克里斯蒂安 编辑: 我能够通过以下方式实现我想要的: - (void)startParsing { NSData *xmlData = [[NSData alloc] initWithContentsOfURL:[NSURL
- (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。。。从这里开始,我应该如何从每个元素中获取值呢?虽然知道这一点很好,但实际上使用JSON可能会容易得多 进口 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
进口“cardetals.h”
@实现细节
@合成地图名;
@合成MapContentName;
@综合地图宽度、地图高度
@结束
请看,这些是模型对象,您在其中全局存储ur值,您可以从这里使用这些值
现在我们使用三个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中,仅当找到第一个节点时,才分配模型类对象
2) 在foundCharacters中附加数据
3) 在didEndElement中,您将把foundCharacters中的数据分配给模型对象,我想您一定创建了这样一个模型类: 进口 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
进口“cardetals.h”
@实现细节
@合成地图名;
@合成MapContentName;
@综合地图宽度、地图高度
@结束
请看,这些是模型对象,您在其中全局存储ur值,您可以从这里使用这些值
现在我们使用三个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中,仅当找到第一个节点时,才分配模型类对象
2) 在foundCharacters中附加数据
3) 在DiEndElement中,您将把数据从foundCharacters分配到model对象说“XML真的很容易”的人通常分为两类:完全理解XML的人和认为完全理解XML的人。你属于哪一类?可能是最后一类……你应该先读苹果的。谢谢:)我会深入探讨:说“XML真的很容易”的人通常分为两类:完全理解XML的人和认为完全理解XML的人。你属于哪一个?可能是最后一个…你应该先读苹果的。谢谢:)我会深入研究:Di已经制作了一个JSON应用程序:)现在我想用XML做点什么;)如果您正在开发一个企业级应用程序,该应用程序使用的是您没有编写的XML,那么您可能需要了解这一点。否则,如果您创建的传输将相对简单,那么我将避免在iPhone上使用XML。它可能更强大,但解析/解包既麻烦又痛苦。但是,这是我想要学习的道具。我已经制作了一个JSON应用程序:)现在我想用XML做点什么;)如果您正在开发一个企业级应用程序,该应用程序使用的是您没有编写的XML,那么您可能需要了解这一点。否则,如果您创建的传输将相对简单,那么我将避免在iPhone上使用XML。它可能更强大,但解析/解包既麻烦又痛苦。但是,想要学习它的道具。