Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSXMLParser解析XML文件-获取值_Iphone_Objective C_Xml_Ios_Nsxmlparser - Fatal编程技术网

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

Iphone 使用NSXMLParser解析XML文件-获取值,iphone,objective-c,xml,ios,nsxmlparser,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

我有一个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,但无法获取
名称
价格
位置
或描述

我一直在想怎么做


任何帮助都有帮助。

您必须将项目标记字典作为数组和三标记(名称、价格和位置)作为索引0.,1,2

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

NSXMLParser * parser = [[NSXMLParser alloc] initWithData:_data];
[parser setDelegate:self];
BOOL result = [parser parse];
您最感兴趣在委托对象中实现的消息是。这家伙会为XML文件中的每个元素调用。在此回调中,您可以将名称、价格和位置属性添加到各自的数组中

- (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)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string

您是否已阅读?或的可能重复项。这是一个很好的教程,但有一点我没有得到帮助。您能告诉我如何读取字符串“这是第一个产品”吗?谢谢,我现在对NSXMLParser有了一些了解。@jack greenhill没问题:)您能详细说明一下如何执行吗?我有一个确切的要求,即获取标签之间的值。