关于kissxml的简单使用
来源:互联网 发布:网络推广公司招聘 编辑:程序博客网 时间:2024/05/16 12:10
好久没有用过XML了,最近有项目需要用到XML,我就用了kissxml这个三方库,感觉还不错,比较简单,记录一下使用的方法免得忘了吧
下面是我随便截取的一段XML
<Config> <Cars name="中国车组" id="2" type="cargroup" bmp0="s2_1.png" bmp1="s2_2.png"> <Car id="930"> <icon>cnicon.png</icon> <log>cnlog.txt</log> <txt>安全气囊</txt> <ecu path="china/srsecu" name="930"/> </Car> <Car id="941"> <icon>cnicon.png</icon> <log>cnlog.txt</log> <txt>水冷系统</txt> <ecu path="china/zhidou" name="941"/> </Car> <Car id="30"> <icon>cnicon.png</icon> <log>cnlog.txt</log> <txt>发动机系统</txt> <ecu path="china/engsys" name="30"/> </Car> <Car id="917"> <icon>cnicon.png</icon>0 <log>cnlog.txt</log> <txt>防抱死刹车系统</txt> <ecu path="china/absecu" name="917"/> </Car> </Cars></Config>
怎样导入kissxml库之类的废话就不写了
//获取xml路径 NSString *path = [[NSBundle mainBundle] pathForResource:XX.xml ofType:nil]; //从xml读取数据 NSData *data = [NSData dataWithContentsOfFile:path]; //获取目录 DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil]; //解析 这句话的意思是读取Config里面的Cars NSArray *cars = [xmlDoc nodesForXPath:@"//Config/Cars" error:nil]; //遍历获取cars里面的成员 for (DDXMLElement *element in cars) { //比如要获得cars里面的name,就这么写 NSString *name = [[element attributeForName:@"name"] stringValue];//name=@"中国车组" //获得cars里面的每一个car NSArray *car = [element elementsForName:@"Car"]; for (DDXMLElement *subElements in car) { //获取car的id NSString *carID = [[subElements attributeForName:@"id"] stringValue]; //获取car里面的icon childAtIndex这个方法你可以理解成他是把car里面的成员都放进一个集合里,然后我们就通过下标获取对应的值,不知道说得对不对,反正我是这么理解的,说得不对的话请小伙伴们纠正 NSString *carIcon = [[subElements childAtIndex:0] stringValue]; //获取car里面的log NSString *carLog = [[subElements childAtIndex:1] stringValue]; //获取car里面的txt NSString *carTxt = [[subElements childAtIndex:2] stringValue]; //car里面的这个ecu就不能用childAtIndex这个方法来获取了,因为我们要获取ecu里面的path和name,做法也非常简单 NSArray *ecus = [subElements elementsForName:@"ecu"]; DDXMLElement *ecu = [ecus firstObject]; //获取ecu里的path,name也是同理,就懒得写了 NSString *ecuPath = [[ecu attributeForName:@"path"] stringValue]; }
这上面就是kissxml的读取xml数据的过程,还有更多功能我就懒(ye)得(bu)写(hui)了…
第一次自己写博客,大家将就看吧
**
2015/11/19更新——XPath用法
逛网站时候无意间看到一篇博文,上面有介绍XPath,好奇的进去看了下,觉得还算简单,自己试了下,然后来总结下Kissxml的XPath用法
首先甩上我看的那篇博文的传送门
前面获取目录部分都一样
//获取xml路径 NSString *path = [[NSBundle mainBundle] pathForResource:XX.xml ofType:nil]; //从xml读取数据 NSData *data = [NSData dataWithContentsOfFile:path]; //获取目录 DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil]; //获取根节点 DDXMLElement *rootElement = [xmlDoc rootElement];//根据XPath表达式获取数据,返回一个数组 NSArray *datas = [rootElement nodesForXPath:@"这里填XPath的表达式,下面会介绍表达式写法" error:nil]; for (DDXMLElement *subElement in datas) { NSLog(@"%@---%@",subElement.name,subElement.stringValue); }
通配符 描述* 匹配任何节点。@* 匹配任何属性node() 匹配任何类型的节点
XPath表达式实例:
获取根节点下所有这个名字的节点—//节点名
比如要获取Config里面所有名字叫Cars的节点,表达式就可以填@”//Cars” 栗子如下
NSArray *datas = [rootElement nodesForXPath:@"//Cars" error:nil];
获取节点下的子节点—节点/子节点
举个栗子:获取Cars的节点里面的Car子节点
表达式-------- @"//Cars/Car"
获取节点里的属性—节点/@属性
举个栗子:获取Cars的id属性
表达式-------- @"//Cars/@id"
如果不知道属性名或者节点名还可以直接用*代替属性名,获取节点所有的属性或者子节点
表达式-------- @"//Cars/@*"获取Cars的所有属性表达式-------- @"//Cars/*"获取Cars的所有所有子节点
多个节点路径的情况可以用’|’来分开,比如我只想要Cars里面的id和type属性,可以这么写
表达式-------- @"//Cars/@id | Cars/@type"
接下来就到高级一点的用法—-谓词
谓词可以嵌套在方括号里对查询结果根据你设定的条件进一步筛选
一个个介绍太麻烦了,直接上表达式实例吧
@"//Config/Cars[last()]" 获取Config里的最后一个节点@"//Cars/Car[1]" 获取Cars里面的第一个Car节点@"//Cars/Car[last()-1]" 获取Cars里面的倒数第二个Car节点@"//Cars/Car[position()<3]" 获取Cars里面的前2个Car节点@"//Cars/Car[@id]" 获取Cars里面的有属性id的Car@"//Cars/Car[@id = 941]" 获取Cars里面属性id为941的Car节点@"//Cars[@type = 'cargroup']" 获取Config里面属性type为cargroup的节点@"//Cars/Car[txt = '水冷系统']" 获取Cars里面txt为水冷系统的Car节点@"//Cars/Car[@id > 30]" 获取Cars里面属性id大于30的Car节点@"//Cars/Car[@id > 30]/txt" 获取Cars里面属性大于30的Car节点里的txt子节点@"//Cars/Car[@id = 941]/ecu/@*" 获取Cars里面id=941的Car节点里面的ecu子节点的所有属性
这就是我所知道的XPath的全部用法了,还有什么特别姿势请小伙伴们帮我解锁吧
0 0
- 关于kissxml的简单使用
- KissXML的使用
- Kissxml 解析 XML数据的简单Demo
- cocos2d 中使用Kissxml
- 使用KissXml解析xml
- KissXML的简易教程
- 关于KissXML和GData三方库
- kissXml和GData使用配置
- 一个解析XML数据的简单Demo(以KissXml为例)
- 一个解析XML数据的简单Demo(以KissXml为例)
- IOS学习笔记33—XML解析之KissXML的使用
- IOS学习笔记33—XML解析之KissXML的使用
- IOS学习笔记33—XML解析之KissXML的使用
- IOS开发之路三(XML解析之KissXML的使用)
- Modules 'libxmlSimu' not found 在使用XMPP时导入KissXML时出现的问题
- 关于键盘的简单使用
- 关于KeyListener的简单使用
- 关于StringBuffer的简单使用
- logstash快速入门
- Service启动方式之startService,及注意事项
- Codevs 苹果树
- php小数点后取两位的几种实现方法
- Flip Game-1753
- 关于kissxml的简单使用
- PostgreSQL数据库表名大小写问题
- 欢迎使用CSDN-markdown编辑器
- AsyncTask理解拙见
- 【opencv 角点检测总结】
- spring 视图和视图解析器
- 网络爬虫去重参考
- 8.2.1.8 IS NULL Optimization NULL 优化:
- 如何把安全证书导入到java中的cacerts证书库