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 ...
随机推荐
- [NOI2014][bzoj3670] 动物园 [kmp+next数组应用]
题面 传送门 思路 首先,这题最好的一个地方,在于它给出的关于$next$的讲解实在是妙极......甚至可以说我的kmp是过了这道题以后才脱胎换骨的 然后是正文: 如何求$num$数组? 这道题的输 ...
- linux系统初始化——sysinit文件写法详解
sysinit文件写法详解 sysinit文件是linux初始化文件系统时执行的第一个脚本文件.它主要做在各个运行级别中进行初始化工作,包括: 启动交换分区;检查磁盘;设置主机名;检查并挂载文件系统; ...
- CDOJ 30 裸最短路 SPFA
最短路 Edit Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- linux命令 显示文件内容
通过命令+文件名查看内容.如下命令可以查看.1, cat :由第一行开始显示文件内容:2,tac:从最后一行开始显示,可以看出tac与cat字母顺序相反:3,nl:显示的时候输出行号:4,more:一 ...
- [AGC008F] Black Radius(树形dp)
神题啊!! Description 给你一棵有N个节点的树,节点编号为1到N,所有边的长度都为1 "全"对某些节点情有独钟,这些他喜欢的节点的信息会以一个长度为N的字符串s的形式给 ...
- LOJ#2307. 「NOI2017」分身术
$n \leq 100000$个点,$m \leq 100000$次询问,每次问删掉一些点后的凸包面积. 不会啦写个20暴力,其实是可以写到50的.当个计算几何板子练习. //#include< ...
- Android开发跳坑记录
本文主要记录在Android开发中遇见的一些问题,以及解决方法. 2015.12.01 1.adb.exe 端口被占用 解决: http://blog.csdn.net/xiaanming/artic ...
- 解決eclipse 的alt + / 快捷鍵不好用
最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...
- android中与Adapter相关的控件----GridView
GridView(网格视图)讲解 一.GridView(网格视图)这个是控件也是比较多,和listView的很多地方都是一样的,但是GridView可以显示多列,而listView只能显示一列,个人觉 ...
- [SaltStack] salt-master启动流程
SaltStack源码阅读 做salt有一段时间了, 一直没从源码层面去理解, 好吧, 开始读读源码 -_- 那就从salt-master的启动开始吧. 启动salt-master方法: /etc/i ...