如何使用ns xml解析器在iPhone中区分另外两个包含相同名称的Xml标记

时间:2012-03-05 08:51:41

标签: iphone xml xcode

我是iPhone开发的新手。我有两个xml标签具有相同的名称。如何区分这两个标签。我的意思是如何确定何时关闭第一个标签

   <data>
    <level>0</level>
    <type>video</type>
    <file>file_CTcE96nTfP3sXIQ8.wmv</file>
    <position>0,0,640,360</position>
    <duration>121</duration>
</data>
<data>
    <level>0</level>
    <type>image</type>
    <file>file_CTNJ1da7ntcTGmxd.jpg</file>
    <position>640,0,1024,360</position>
    <duration>121</duration>
</data>
<data>
    <level>0</level>
    <type>image</type>
    <file>file_CTAo1yLWaZqXkpic.png</file>
    <position>0,360,337,480</position>
    <duration>121</duration>
</data>

我实施了这些方法。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

    if ([elementName isEqualToString:@"data"]) {

    }

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
???
}

这里有三个数据标签。我想把所有的每个数据标签放在三个数组中。我怎么能实现那个。我的意思是这样的

data1(file,type,position,duration)
data2(file,type,position,duration)
data3(file,type,p‌​osition,duration)

2 个答案:

答案 0 :(得分:1)

在didStartElement

if ([elementName isEqualToString:@"data"]) {
    data = [[NSMutableDictionary alloc] init];
    level = [NSMutableString alloc] init];
    type = [NSMutableString alloc] init];
    position = [NSMutableString alloc] init];
    duration = [NSMutableString alloc] init];
}   

然后在didEndElement

if ([elementName isEqualToString:@"data"]) {
    [data setObject:type forKey:@"type"];
    [data setObject:position forKey:@"position"];
    [data setObject:duration forKey:@"duration"];
    [dataList addObject:data];
}

你需要添加foundCharacters委托方法并在这里为字符串赋值

if ([currentElement isEqualToString:@"type"]) {
    [type appendString:string];
}

if ([currentElement isEqualToString:@"position"]) {
    [position appendString:string];
}
if ([currentElement isEqualToString:@"duration"]) {
    [duration appendString:string];
}

级别,位置和持续时间将被解析为普通标签..

答案 1 :(得分:0)

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{

     if ([elementName isEqualToString:@"data"]) 
       {

       }
}