iOS开发之解析XML格式数据
XML格式的数据是一种数据的传输格式。因为它方便编写。结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息。
如今我将来实如今iOS中解析XML格式数据,语言使用Swift。
首先自己写一个简单的XML:
- <data>
- <person age="15">zhangsan</person>
- <person age="2">lisi</person>
- <person>wangwu</person>
- <a>
- <b>
- <c>many people</c>
- </b>
- </a>
- </data>
先把这个XML写成一个文件 data.xml存放在Supporting Files中,在程序中进行读取。
(1)首先在这个ViewController中实现一个托付:NSXMLParserDelegate。然后在viewDidLoad()中读取xml文件。viewDidLoad()方法实现例如以下:
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view, typically from a nib.
- var parser = NSXMLParser(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("data", ofType: "xml")!))
- parser!.delegate = self
- parser!.parse()
- }
(2)然后读取头结点值,如<data>,<person>,<a>,<b>,<c>.要实现一个parse()方法:
- func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
- println(elementName) //输出每个头结点;如data。person,person,a,b,c;
- }
实现结果例如以下:符合我们的预期。
。
(3)然后尝试读取属性值,如XML中的age。
也是在上述的parse()方法中进行实现。
代码例如以下:
- func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?
- , attributes attributeDict: [NSObject : AnyObject]) {
- if elementName == "person"{
- if let age: AnyObject = attributeDict["age"]{
- println("age = \(age)")
- }
- }
- }
输出结果例如以下:
。
(4)最后我们要一起读取节点值和里面包括的键值。
须要在NSXMLParserDelegate托付中再重写一个parse方法。当中两个重写parse方法例如以下:
- func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?
- , qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
- currentNodeName = elementName
- }
- func parser(parser: NSXMLParser, foundCharacters string: String?
- ) {
- var str = string?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
- if str != ""{
- println("current node= \(currentNodeName),value=\(str!)")
- }
- }
最后的输出结果例如以下:符合·预期的结果。
。
(5)整个程序的代码例如以下。里面有比較具体的凝视:
- import UIKit
- class ViewController: UIViewController ,NSXMLParserDelegate{
- override func viewDidLoad() {
- super.viewDidLoad()
- //从data.xml中读取内容
- var parser = NSXMLParser(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("data", ofType: "xml")!))
- parser!.delegate = self //使用xml解析的托付。须要重写方法;
- parser!.parse()
- }
- var currentNodeName:String! // 等下记录当前读取到的节点名称;
- func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) {
- println(elementName) //输出每个头结点;如data。person,person,a,b,c;
- currentNodeName = elementName
- if elementName == "person"{//读取某个节点下的属性值。如person下有age属性;
- //可能有些person节点没有age属性,须要使用if来进行推断;否则在读取没有age的节点时会报错;
- if let age: AnyObject = attributeDict["age"]{
- println("age = \(age)")
- }
- }
- }
- func parser(parser: NSXMLParser, foundCharacters string: String?) {
- // 在整个xml文件的读取中,空格也会被以字符串的形式读取。所以须要删除空行和空格;
- //string 就是这个节点的键值;
- var str = string?
- .stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
- //还须要推断这个键值是否为空。由于有些头尾节点之间并没有值:如 <d></d>等等。
- if str != ""{
- println("current node= \(currentNodeName),value=\(str!)")
- }
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- }
- }
事实上须要解析xml用得最多的地方就是client用SOAP去訪问WebService,此时WebService非常多返回的都是xml。
github主页:https://github.com/chenyufeng1991 。欢迎大家訪问!
iOS开发之解析XML格式数据的更多相关文章
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- 解析XML格式数据
学习解析XML格式的数据前,搭建一个简单的web服务器,在这个服务器上提供xml文本用于练习. 一.搭建Apache服务器 在Apache官网下载编译好的服务器程序,安装.对于Windows来说127 ...
- ios网络学习------8 xml格式数据的请求处理 用代码块封装
#pragma mark 载入xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从webserver载入数据 NSStri ...
- Swift - 解析XML格式数据(分别使用GDataXML和DDXML)
在做一些应用的时候经常需要用到XML解析,比如获取Web Service数据,读取RSS新闻或者博客数据源.下面演示了两个非常方便高效的XML库在Swift里的调用方法. 假设需要被解析的XML数据文 ...
- rabbitmq - 消息接收,解析xml格式数据时异常:ERROR not well-formed (invalid token): line 4, column 46
ERROR alsv odoo.addons.cus_alsv.utils.alsv_about_mq.get_data_from_mq: parse_xml_data_from_mq: not we ...
- iOS开发网络篇—XML数据的解析
iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...
- (5)微信二次开发 之 XML格式数据解析
1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...
- scrapy 解析xml格式的数据
XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...
- ios网络学习------6 json格式数据的请求处理
ios网络学习------6 json格式数据的请求处理 分类: IOS2014-06-30 20:33 471人阅读 评论(3) 收藏 举报 #import "MainViewContro ...
随机推荐
- [SCOI2011][bzoj2331] 地板 [插头dp]
题面: 传送门 思路: 插头dp基础教程 这个L形......第一眼看上去真的是丧病啊 但是仔细想想,实际上也就是拿一堆路径铺满一个棋盘,这个路径还是有限制的 那还有什么好说的,插头dp上啊[雾] 首 ...
- sqlmap post注入两种方式
1. 使用抓包工具抓取数据包,sqlmap加载数据包 POST /SME/static/orderFind/orderIntfaceph HTTP/1.1 Host: abc.com User-Age ...
- 使用PropTypes进行类型检测
PropTypes 是react提供的用于检验数据类型的typechecking,避免应用越来越大的时候出现意料之外的bug class Greeting extends React.Componen ...
- 容易混淆的某些Math方法说明
1. Math.round 返回最接近的整数值,实际上就是我们说的对小数进行四舍五入. /** * 返回最接近参数的long */ static long round(double a) /** * ...
- android基本控件学习-----Button
Button讲解: 一.在我们实际的使用button的时候经常会对button不同状态会有不同的显示,在讲解Button前,首先对drawable下面的statelistdrawable的相关知识讲一 ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---4
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: <Linux命令行与shell脚本 ...
- hdu 3639 有向图缩点+建反向图+搜索
题意:给个有向图,每个人可以投票(可以投很多人,一次一票),但是一个人只能支持一人一次,支持可以传递,自己支持自己不算,被投支持最多的人. 开始想到缩点,然后搜索,问题是有一点想错了!以为支持按票数计 ...
- [Python Cookbook] Numpy Array Slicing and Indexing
1-D Array Indexing Use bracket notation [ ] to get the value at a specific index. Remember that inde ...
- JMeter特殊情况二:针对某些请求数据每次请求都是变化的情况
概要:某些post请求,例如,登录的请求除了有我们再页面上需要输入的一些值(用户名.密码.是否记住密码等)之外,还有其他的参数,例如token等等,而且这些参数不固定,也就是说每一次post请求这些参 ...
- httperf+autobench测试web应用
测试性能相关的概念理解 httperf使用 主页: http://www.hpl.hp.com/research/linux/httperf/ 下载: http://httperf.googleco ...