使用NSXMLParser解析XML文件 – 获取值

我有一个XML文件,其中包含我想要使用的一些数据:

   This is the first product.   This is the second product.   This is the third product.   

如果我制作了4个数组,一个用于名称,一个用于价格,一个用于购买,一个用于描述,如何将数据输入数组?

我想使用NSXMLParser,但无法获得namepricewhere或描述。

我坚持要怎么做。

任何帮助赞赏。

首先,您需要创建一个进行解析的对象。 它将实例化NSXMLParser实例,将其自身设置为解析器的委托 ,然后调用解析消息。 它还可以负责存储您的四个结果数组:

 NSXMLParser * parser = [[NSXMLParser alloc] initWithData:_data]; [parser setDelegate:self]; BOOL result = [parser parse]; 

您最有兴趣在委托对象中实现的消息是didStartElement 。 为XML文件中的每个元素调用此人。 在此回调中,您可以将名称,价格和where属性添加到各自的数组中。

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { // just do this for item elements if(![elementName isEqual:@"item"]) return; // then you just need to grab each of your attributes NSString * name = [attributeDict objectForKey:@"name"]; // ... get the other attributes // when we have our various attributes, you can add them to your arrays [m_NameArray addObject:name]; // ... same for the other arrays } 

在以下方法中

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { if([elementName isEqualToString:@"item"]) { NSString *name=[attributeDict objectForKey:@"name"]; NSString *price=[attributeDict objectForKey:@"price"]; NSString *where=[attributeDict objectForKey:@"where"]; } } 

要获取标记之间的值(例如“这是第一个产品。”),您可以覆盖 – (void)解析器:(NSXMLParser *)解析器foundCharacters:(NSString *)string

你必须将item标签的字典视为一个数组,并将三个标签(名称,价格和位置)视为索引0,1,2处的对象