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  。欢迎大家訪问!

时间: 2024-10-11 05:25:15

iOS开发之解析XML格式数据的相关文章

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

#pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里是乱写的 //1简历NSURL NSURL *url = [NSURL URLWithString:str]; //2建立NSURLRequest NSURLRequest *request =

ios网络学习------7 xml格式数据的请求处理

用NSXMLParser解析XML文件过程: 1 创建NSXMLParser实例,并传入从服务器接收XML数据. 2 定义解析器代理 3 解析器解析. 4 通过解析代理方法完成XML数据的解析. #pragma mark 加载xml - (void)loadXML { //获取网络数据. NSLog(@"load xml"); //从web服务器加载数据 NSString *str = @"http://www.baidu.com?format=xml"; //这里

Android之解析XML格式数据

作用:在网络上传输数据时最常用的格式有两种,XML 和 JSON.解析XML格式数据获得与后台交互的信息. 种类: 3种:Pull 解析方式:SAX 解析方式:DOM解析方式. 1.使用Pull解析器解析XML文档Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始.文档结束.开始元素和结束元素等.使用parser.next()方法可以进入下一个元素并触发相应的事件.各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事

iOS dom解析xml格式数据

问题描述:接口返回的是xml格式数据,而且节点名居然都是相同的,采用了dom解析最终解决 一.文件导入 1.下载GDataXMLNode.h 和 GDataXMLNode.m文件,导入工程(csdn文件下载链接:http://download.csdn.net/detail/wusangtongxue/9502292) 2.配置环境: (1)改成ARC环境(-fno-objc-arc): (2)找到“Paths\Header Search Paths”项,并添加“/usr/include/lib

iOS开发之解析XML

xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundation/Foundation.h> @interface FKBook : NSObject @property (nonatomic , assign) NSInteger bookID; @property (nonatomic , copy) NSString *title; @property

Swift - 解析XML格式数据(分别使用GDataXML和DDXML)

在做一些应用的时候经常需要用到XML解析,比如获取Web Service数据,读取RSS新闻或者博客数据源.下面演示了两个非常方便高效的XML库在Swift里的调用方法. 假设需要被解析的XML数据文件users.xml如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version="1.0" encoding="utf-8"?>  <Users>      <User id=&q

利用XStream解析XML格式数据

1.导入xstream.jar: 2.引用XMLUtil工具类: 3.使用用例: 4.打印结果: 5.用到的bean对象: 来自为知笔记(Wiz) 附件列表

iOS开发网络篇—XML数据的解析

iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document) XML举例 <videos> <video name="小黄人 第01部" length="30" /> <video name="小黄人 第02部&qu

iOS开发-简单解析JSON数据

什么是JSON ? JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) ? JSON的格式很像OC中的字典和数组 ? {"name" : "Jack", "age" : 10} {"name" : ["jack", "rose", "jim"]} ? 标准JSON格式的注意点: key必须用双