XML数据解析:
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
设置代理:
parser.delegate = self;
开始解析
[parser parse];
代理方法:
开始解析文档,可在其中初始化一些需要的量
- (void)parserDidStartDocument:(NSXMLParser *)parser
得到解析的节点名称: elementName为节点名称,可在此进行判断是否为某一节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
得到节点中的数据: 注意这个方法可能会调用多次,需要用[currentText appendString:string];
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
一个节点完成后,在此处理节点,例如添加到一个数组或字典中:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
前面三个方法会循环调用直到数据解析完成后会调用解析完成后的操作。
解析完成:
- (void)parserDidEndDocument:(NSXMLParser *)parser
注意点:如果创建了一个对象,只是临时存放一些值,然后还要去存放另一些值,就记着不要用同一块内存空间,不然在清楚数据的同时也会导致自己的数据找不到,最好的方法就是各放到一块存储空间中,这样才可以得到解决。方法就是创建时放到恰当的位置。
XML解析之原理分析:
XML解析一般分为两种模式SAX和DOM,事件和文件。
XML解析之SAX解析,以及对NSXMLParser的应用
sax解析说白了,就是一个事物模型解析,从头开始读取文档然后根据读取到的头标签时要怎么去处理,读完头标签后,理论上是读取标签值了,然后读取后遇到的结束标签等。 上面分析的结构就是sax的一种解析。
Dom文档解析模型,TBXML第三方应用。
dom解析模型就像一个树结构,节点,子节点,兄弟节点等等。
这个解析器太简化了,太简洁的东西导致控制的入口点太少,就比如一个一键优化的概念是一样的。
简单来说,SAX解析器会检测整个XML树形结构,你的代码会控制它在哪里停止,使用哪些数据之类的事情,也就是说,SAX可控制性强,占用内存小,适用于提取部分数据。
DOM解析器会检测整个文档并且在内存中生成一个复制品,之后你的任何操作都是在这个复制品中进行的。