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

时间:2011-05-21 12:12:07

标签: iphone objective-c xml ios nsxmlparser

我有一个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,但无法获得namepricewhere或说明。

我一直坚持如何做到这一点。

任何帮助表示感谢。

4 个答案:

答案 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的对象