iOS上的NSXMLParser,如何在给定xml文件的情况下使用它

时间:2010-06-03 09:00:46

标签: ios xml cocoa nsxmlparser

我想知道如何使用NSXML解析器。 所以,假设我有一个简单的xml文件,其中包含以下元素:

<Today>
<Date>1/1/1000</Date>
<Time>14:15:16</Time>
</Today>

我如何使用NSXMLParser来解析XML文件(它在本地btw,桌面上),检查每个元素并将它们存储在一个数组中,以便以后显示/使用?

我正在查看有关它的一些文档,我不知道如何使用解析器 我知道有三种方法(或更多,请纠正我,如果我错了)可以被覆盖 - ..等didStartElement - ..等didEndElement - .. etc foundCharacters

1 个答案:

答案 0 :(得分:4)

最简单的事情是做这样的事情:

NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:<yourNSData>];
[xmlParser setDelegate:self];
[xmlParser parse];

请注意,setDelegate:将委托设置为“self”,表示当前对象。因此,在该对象中,您需要实现您在问题中提到的委托方法。

在代码中进一步向下,粘贴:

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

       NSLog(@"I just found a start tag for %@",elementName);
       if ([elementName isEqualToString:@"employee"]){
       // then the parser has just seen an <employee> opening tag
       }         
     }

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"the parser just found this text in a tag:%@",string);
}

等。等

当你想要做一些事情,例如将变量设置为某个标签的值时,这有点困难,但通常使用类似于“BOOL inEmployeeTag”的类变量caleld来设置为true(YES)在didStartElement:方法中,在didEndElement:方法中使用false - 然后在foundCharacters方法中检查它的值。如果是,则将var分配给string的值,如果不是,则不分配。

理查德