使用NSXMLParser解析XML文件 – 获取值
我有一个XML文件,其中包含我想要使用的一些数据:
This is the first product. This is the second product. This is the third product.
如果我制作了4个数组,一个用于名称,一个用于价格,一个用于购买,一个用于描述,如何将数据输入数组?
我想使用NSXMLParser,但无法获得name
, price
, where
或描述。
我坚持要怎么做。
任何帮助赞赏。
首先,您需要创建一个进行解析的对象。 它将实例化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处的对象