我有一个XML文件,其中包含我想要使用的一些数据:
<?xml version="1.0" encoding="UTF-8" ?>
<items>
<item name="product" price="19.95" where="store">
This is the first product.
</item>
<item name="product2" price="39.95" where="online">
This is the second product.
</item>
<item name="product3" price="99.95" where="garagesale">
This is the third product.
</item>
</items>
如果我制作了4个数组,一个用于名称,一个用于价格,一个用于购买,一个用于描述,如何将数据输入数组?
我想使用NSXMLParser,但无法获得name
,price
,where
或说明。
我一直坚持如何做到这一点。
任何帮助表示感谢。
答案 0 :(得分:15)
首先,您需要创建一个进行解析的对象。它将实例化NSXMLParser实例,将其自身设置为解析器的delegate,然后调用解析消息。它还可以负责存储您的四个结果数组:
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
}
答案 1 :(得分:5)
要获取标记之间的值(例如“这是第一个产品。”),您可以覆盖 - (void)解析器:(NSXMLParser *)解析器foundCharacters:(NSString *)string
答案 2 :(得分:3)
以下方法
- (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"];
}
}
答案 3 :(得分:0)
你必须将item标签的字典视为一个数组,并将三个标签(名称,价格和位置)视为索引0,1,2的对象