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 = selfparser!.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 UIKitclass 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 = elementNameif 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  。欢迎大家訪问!

转载于:https://www.cnblogs.com/gavanwanggw/p/7241761.html

iOS开发之解析XML格式数据相关推荐

  1. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

  2. php获得帮助类数据_PHP解析xml格式数据工具类示例

    本文实例讲述了PHP解析xml格式数据工具类.分享给大家供大家参考,具体如下: class ome_xml { /** * xml资源 * * @var resource * @see xml_par ...

  3. php解析xml数据格式,PHP解析xml格式数据工具类实例分享

    本文主要介绍了PHP解析xml格式数据工具类,涉及php针对xml格式数据节点添加.获取.解析等相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 本文实例讲述了PHP解析xml格式数据工具类.分 ...

  4. 解析XML格式数据实例

    前言: 网络数据传输时,最常用的格式有两种:XML和JSON,下面我们就研究如何使用Pull解析和Sex解析来实现对XML格式文件数据的解析. 实例流程: 1.创建服务器:Apache服务器(用于模拟 ...

  5. iOS开发之解析XML数据

    XML解析主要可以使用CData,libxml2以及NSXMLParser三种方式. 一.CDataXML 创建FKBook类 #import <Foundation/Foundation.h& ...

  6. Android初级开发(九)——网络交互—解析XML格式数据

    一.前言 首先我们先搭建一个web服务器,我这里用的是tomcat,搭建过程可参见tomacat服务器的搭建:http://blog.csdn.net/qq_28585471/article/deta ...

  7. ios网络学习------8 xml格式数据的请求处理 用代码块封装

    #pragma mark 载入xml - (void)loadXML {//获取网络数据.NSLog(@"load xml");//从webserver载入数据NSString * ...

  8. Xml 格式数据的生成和解析

    相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...

  9. Android——网络交互,如何调用接口并且json解析json格式和pull解析xml格式

    本菜鸟因为之前一直使用的是公司前辈封装好的类(网络接口调用超级方便有木有)完全没有想过有一天我会自己写,然后今天接触的时候一脸懵逼,然后今天花了一天时间终于研究好了:哈哈哈哈哈 二话不说先上代码: p ...

最新文章

  1. zabbix服务无法启动
  2. 【阿里云API】 阿里云API调用的若干说明
  3. OneProxy实现MySQL读写分离与负载均衡
  4. [置顶] 删除:大数据取舍之道读书笔记
  5. android edittext 手机号码,Android中EditText中的电话号码格式
  6. python wrapper_Python functools之partial, update_wrapper, wraps
  7. Eclipse简单字体设置
  8. Podfile文件用法详解
  9. Vue组件(附带轮播图代码)
  10. 交叉熵、KL散度、Jeffery分歧、JS散度
  11. kafka消息服务的producer、broker、consumer的配置
  12. win10注册mysql到windows服务报错:Install/Remove of the Service Denied
  13. dpdk pktgen发包工具使用
  14. 高职高考数学可以用计算机吗,什么学习水平高职高考数学可以答满分
  15. wireshark安装s7comm-plus插件
  16. 电脑硬件入门基础知识——看完就会选电脑啦
  17. 资源 | 斯坦福大学Tensorflow深度学习课程表
  18. 用Boost:regex库进行网页分析源代码【转】
  19. 【软件测试常见Bug清单】
  20. ☀️前端基础—【CSS✨✨✨】

热门文章

  1. 简单而常用的shell 命令
  2. 叶氏量能大抄底(通达信副图)
  3. 考研(一):一段不错的经历之考研总结
  4. 福特在迈阿密开始探索自动驾驶商业模式:先送比萨试试
  5. [EasyHexo 专栏] #1 - Markdown 编辑器推荐与语法简介
  6. Shell脚本批量清除Nginx缓存
  7. 事件管理决定一个网管软件的成功与失败
  8. 360分拆计划生变,临时剥离四大业务
  9. Shane 版详细设计书文档模板
  10. 读取FTP上的excel文件,并写入数据库