川沙网站建设,网站推广服务外包有哪些渠道,南阳做网站多少电话,装修公司加盟店排行榜IOS学习#xff1a;常用第三方库#xff08;GDataXMLNode#xff1a;xml解析库#xff09; 解析 XML 通常有两种方式#xff0c;DOM 和 SAX#xff1a; DOM解析XML时#xff0c;读入整个XML文档并构建一个驻留内存的树结构#xff08;节点树#xff09;#xff0c;通… IOS学习常用第三方库GDataXMLNodexml解析库 解析 XML 通常有两种方式DOM 和 SAX DOM解析XML时读入整个XML文档并构建一个驻留内存的树结构节点树通过遍历树结构可以检索任意XML节点读取它的属性和值。而且通常情况下可以借助XPath直接查询XML节点。 SAX解析XML是基于事件通知的模式一边读取XML文档一边处理不必等整个文档加载完之后才采取操作当在读取解析过程中遇到需要处理的对象会发出通知对其进行处理。 一般在iOS平台下比较常用的XML解析类库有如下几种 NSXMLParserhttp://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html 这是一个SAX方式解析XML的类库默认包含在iOS SDK中使用也比较简单。 libxml2http://xmlsoft.org/是一套默认包含在iOS SDK中的开源类库它是基于C语言的API所以使用起来可能不如NSXML方便。这套类库同时支持DOM和SAX解析libxml2的SAX解析方式还是非常酷的因为它可以边读取边解析尤其是在从网上下载一个很大的XML文件就可以一边下载一边对已经下载好的内容进行解析极大的提高解析效率。 TBXMLhttp://www.tbxml.co.uk/TBXML/TBXML_Free.html这是一套轻量级的DOM方式的XML解析类库有很好的性能和低内存占用不过它不对XML格式进行校验不支持XPath并且只支持解析不支持对XML进行修改。 TouchXMLhttps://github.com/TouchCode/TouchXML这也是一套DOM方式的XML解析类库支持XPath不支持XML的修改。 KissXMLhttp://code.google.com/p/kissxml/这是一套基于TouchXML的XML解析类库和TouchXML相比支持了XML的修改。 TinyXMLhttp://www.grinninglizard.com/tinyxml/这是一套小巧的基于C语言的DOM方式进行XML解析的类库支持对XML的读取和修改不直接支持XPath需要借助另一个相关的类库TinyXPath才可以支持XPath。 GDataXMLhttp://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/这是一套Google开发的DOM方式XML解析类库支持读取和修改XML文档支持XPath方式查询。 一、GDataXMLNode说明 GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2--DOM处理方式进行了封装能对较小或中等的xml文档进行读写操作且支持XPath语法。 使用方法 1、获取GDataXMLNode.h/m文件将GDataXMLNode.h/m文件添加到工程中 2、向工程中增加“libxml2.dylib”库 3、在工程的“Build Settings”页中找到“Header Search Path”项添加/usr/include/libxml2到路径中 4、添加“GDataXMLNode.h”文件到头文件中如工程能编译通过则说明GDataXMLNode添加成功 二、GDataXMLNode示例 示例 [html] view plaincopy root name valuewusj/ age24/age /root 对此xml文件进行解析 [cpp] view plaincopy NSString *xmlPath [[NSBundlemainBundle] pathForResource:testofType:xml]; NSString *xmlString [NSStringstringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncodingerror:nil]; GDataXMLDocument *xmlDoc [[GDataXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil]; GDataXMLElement *xmlEle [xmlDoc rootElement]; NSArray *array [xmlEle children]; NSLog(count : %d, [array count]); for (int i 0; i [array count]; i) { GDataXMLElement *ele [array objectAtIndex:i]; // 根据标签名判断 if ([[ele name] isEqualToString:name]) { // 读标签里面的属性 NSLog(name -- %, [[ele attributeForName:value] stringValue]); } else { // 直接读标签间的String NSLog(age -- %, [ele stringValue]); } } 运行结果 三、GDataXMLNode方法小结 最终的数据读出都是在GDataXMLElement对象中读出的以下方法均为GDataXMLElement类的方法 1、name方法取标签名 e.g name标签的名称“name” 2、attributeForName: 取属性结点 再调stringValue即可取到属性值 e.g name标签中的value属性 3、stringValue 取标签间的字符串值 e.g: age间的24 //DOM 解析 - (IBAction)dommethord:(id)sender { //1,拿到文件 NSString *path [[NSBundle mainBundle] pathForResource:xml ofType:txt]; //2,根据路径拿到数据 NSData *data [NSData dataWithContentsOfFile:path]; //3,创建解析对象 GDataXMLDocument *document [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]; //4,获取根 GDataXMLElement *rootElement document.rootElement; //初始化数组 _allDataMutaArray [NSMutableArray array]; _allDataMutaString [NSMutableString string]; //5,获取根节点下的 所有子节点 NSArray *stuArrayElement rootElement.children; //6遍历每一个Student for (GDataXMLElement *stuElement in stuArrayElement) { //每遍历一次就 创建一个模型 Student *stu [Student new]; //7遍历子节点 for (GDataXMLElement *stuSubElement in stuElement.children) { //8使用KVC的方式 对模型对象进行复制 [stu setValue:stuSubElement.stringValue forKey:stuSubElement.name]; //打印 NSLog(% % ,stuSubElement.name,stuSubElement.stringValue); [_allDataMutaString appendString:stuSubElement.stringValue]; } //将添加好的模型放入数组中 [_allDataMutaArray addObject:stu]; [stu release]; NSLog(----%lu,stu.retainCount); } NSLog( 数据项 %,_allDataMutaArray); _textFieldView.text _allDataMutaString; [document release]; } 转载于:https://www.cnblogs.com/iOS-mt/p/4172059.html