IOS学习:常用第三方库(GDataXMLNode:xml解析库)

解析 XML 通常有两种方式,DOM 和 SAX:

DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值。而且通常情况下,可以借助XPath,直接查询XML节点。

SAX解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。

一般在iOS平台下,比较常用的XML解析类库有如下几种:

NSXMLParser,http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html ,这是一个SAX方式解析XML的类库,默认包含在iOS SDK中,使用也比较简单。

libxml2,http://xmlsoft.org/,是一套默认包含在iOS SDK中的开源类库,它是基于C语言的API,所以使用起来可能不如NSXML方便。这套类库同时支持DOM和SAX解析,libxml2的SAX解析方式还是非常酷的,因为它可以边读取边解析,尤其是在从网上下载一个很大的XML文件,就可以一边下载一边对已经下载好的内容进行解析,极大的提高解析效率。

TBXML,http://www.tbxml.co.uk/TBXML/TBXML_Free.html,这是一套轻量级的DOM方式的XML解析类库,有很好的性能和低内存占用,不过它不对XML格式进行校验,不支持XPath,并且只支持解析,不支持对XML进行修改。

TouchXML,https://github.com/TouchCode/TouchXML,这也是一套DOM方式的XML解析类库,支持XPath,不支持XML的修改。

KissXML,http://code.google.com/p/kissxml/,这是一套基于TouchXML的XML解析类库,和TouchXML相比,支持了XML的修改。

TinyXML,http://www.grinninglizard.com/tinyxml/,这是一套小巧的基于C语言的DOM方式进行XML解析的类库,支持对XML的读取和修改,不直接支持XPath,需要借助另一个相关的类库TinyXPath才可以支持XPath。

GDataXML,http://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示例
 
示例:
  1. <root>
  2. <name value="wusj"/>
  3. <age>24age>
  4. root>
 
对此xml文件进行解析
 
 
  1. NSString *xmlPath = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"xml"];
  2. NSString *xmlString = [NSStringstringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncodingerror:nil];
  3. GDataXMLDocument *xmlDoc = [[GDataXMLDocument  alloc]  initWithXMLString:xmlString  options:0  error:nil];
  4. GDataXMLElement *xmlEle = [xmlDoc rootElement];
  5. NSArray *array = [xmlEle children];
  6. NSLog(@"count : %d", [array count]);
  7. for (int i = 0; i < [array count]; i++) {
  8. GDataXMLElement *ele = [array objectAtIndex:i];
  9. // 根据标签名判断
  10. if ([[ele name] isEqualToString:@"name"]) {
  11. // 读标签里面的属性
  12. NSLog(@"name --> %@", [[ele attributeForName:@"value"] stringValue]);
  13. } else {
  14. // 直接读标签间的String
  15. NSLog(@"age --> %@", [ele stringValue]);
  16. }
  17. }
 
    运行结果:
 
 
三、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];

}

GDataXMLNode:xml解析库的更多相关文章

  1. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  2. EXPAT(XML解析库)

    一.简介 expat是一个由C语言编写的XML解析库.James Clark创建了这个库,现在是制定XML标准的W3组织的技术leader.现在的版本是2.0.2.0开始就由Clark Cooper领 ...

  3. Swift XML解析库 - SwiftyXMLParser

    经过在CocoaPods中筛选以后,发这个这个比较好用,整理出来 如果有需要可以在Pods命令端输入: pod search xml 这样会搜索出很多相关Xml的第三方库 SwiftyXMLParse ...

  4. 第三方:GDataXMLNode:xml解析库--备用

    一.GDataXMLNode说明   GDataXMLNode是Google提供的用于XML数据处理的类集.该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且 ...

  5. Python的html和xml解析库Beautiful Soup

    网站:http://www.crummy.com/software/BeautifulSoup/ 版权声明:本文博主原创文章,博客,未经同意不得转载.

  6. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  7. XML解析器(转)

    常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触 ...

  8. (最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

    一.Xpath 解析   xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则: nodename :选取此节点的所有子节点 // : ...

  9. BeautifulSoup解析库

    解析库 解析器 使用方法 优势 劣势 Python标准库 BeautifulSoup(html, 'html.parser') 速度适中,容错能力强 老版本python容错能力差 lxml HTML解 ...

随机推荐

  1. 20160205.CCPP体系具体解释(0015天)

    程序片段(01):01.杨辉三角.c 内容概要:杨辉三角 #include <stdio.h> #include <stdlib.h> #define N 10 //01.杨辉 ...

  2. DELL平板如何安装WIN10系统 -PE启动问题

    开机按F2可以进入BIOS设置,如果你的系统已经被删了,则开机会自动进入检查程序   进入BIOS之后,可以看到如果改成Legancy,默认第一启动方式是Internal HDD   我如果重装系统, ...

  3. URAL 1224. Spiral (规律)

    1224. Spiral Time limit: 1.0 second Memory limit: 64 MB A brand new sapper robot is able to neutrali ...

  4. 在Linux下如何限制命令执行的时间?

    在Linux下如何限制命令执行的时间?两种解决方法,如下: 1: Linux命令——timeout 运行指定的命令,如果在指定时间后仍在运行,则杀死该进程.用来控制程序运行的时间. 2: comman ...

  5. JPA的配置文件

    一.引入包 <dependencies> <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistenc ...

  6. Spring MVC 实现文件的上传和下载

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:“用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流”.我回复他说:“使用Spring MVC框架可以做到这一点,因为Spri ...

  7. Cocos2d-X中的声音和音效

    在玩游戏时都会有各种游戏音,如启动游戏时会有背景音,胜利或者失败会有一些音效.在Cocos2d-X中能够使用CocosDenshion实现各种声音 在使用CocosDenshion之前须要在程序中加入 ...

  8. SpringMVC学习笔记三:拦截器

    一:拦截器工作原理 类比Struts2的拦截器,通过拦截器可以实现在调用controller的方法前.后进行一些操作. 二:拦截器实现 1:实现拦截器类 实现HandlerInterceptor 接口 ...

  9. CentOS 7 安装php5.6,Nginx,Memcached环境及配置

    安装php5.6版本以后不再需要安装Zend Guard,而是用yum命令安装php-opcache及php-pecl-apcu就可以有效的提高php执行速度. 1. 配置yum源 事先确认yum源的 ...

  10. Artistic Style在windows下的使用(C/C++)

    ArtisticStyle是一个开源的源码格式化工具.主页地址为:http://astyle.sourceforge.net/,它能够应用在C.C++.Objective-C.C#.Java等程序语言 ...