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="101">

        <name>航歌</name>

        <tel>

            <mobile>1234567</mobile>

            <home>025-8100000</home>

        </tel

    </User

    <User id="102">

        <name>hangge</name>

        <tel>

            <mobile>8989889</mobile>

            <home>025-8122222</home>

        </tel>

    </User

</Users>

我们需要实现的功能是解析并打印出需要的数据:


1

2

User: uid:101,uname:航歌,mobile:1234567,home:025-8100000

User: uid:102,uname:hangge,mobile:8989889,home:025-8122222

一,使用GDataXML(这个是google出品的) 

1,在build phases -> Link Binary With Libraries中,点击“+”添加“libxml2.2.dylib”

2,在build setting -> Header Search Paths里添加 ${SDK_DIR}/usr/include/libxml2

3,在build setting里的Objective-C编译选项里,把自动引用计数改为No,否则在应用GDataXML库时会编译有错

4,添加bridge.h头文件并设置到编译参数里


1

#import "GDataXMLNode.h"

5,导入GDataXML库文件(GDataXMLNode.h和GDataXMLNode.m),代码结构如下:

6,开始解析(ViewController.swift)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

import UIKit

class ViewController: UIViewController {

                            

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        var label:UILabel = UILabel(frame:CGRectMake(100, 100,300,100));

        label.text = "输出结果在控制台"

        self.view.addSubview(label)

        //测试Swift调用Object的XML库功能

        testXML()

    }

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    func testXML() {

        //获取xml文件路径

        var path = NSBundle.mainBundle().pathForResource("users", ofType:"xml")

        //获取xml文件内容

        var xmlData = NSData(contentsOfFile:path!)

        //可以转换为字符串输出查看

        //println(NSString(data:xmlData, encoding:NSUTF8StringEncoding))

        

        //使用NSData对象初始化文档对象

        //这里的语法已经把OC的初始化函数直接转换过来了

        var doc:GDataXMLDocument = GDataXMLDocument(data:xmlData, options : 0, error : nil)

        

        //获取Users节点下的所有User节点,显式转换为element类型编译器就不会警告了

        //var users = doc.rootElement().elementsForName("User") as GDataXMLElement[]

        

        //通过XPath方式获取Users节点下的所有User节点,在路径复杂时特别方便

        var users = doc.nodesForXPath("//User", error:nil) as [GDataXMLElement]

        

        for user in users {

            //User节点的id属性

            let uid = user.attributeForName("id").stringValue()

            //获取name节点元素

            let nameElement = user.elementsForName("name")[0] as GDataXMLElement

            //获取元素的值

            let uname =  nameElement.stringValue()

            //获取tel子节点

            let telElement = user.elementsForName("tel")[0] as GDataXMLElement

            //获取tel节点下mobile和home节点

            let mobile = (telElement.elementsForName("mobile")[0] as GDataXMLElement).stringValue()

            let home = (telElement.elementsForName("home")[0] as GDataXMLElement).stringValue()

            //输出调试信息

            println("User: uid:\(uid),uname:\(uname),mobile:\(mobile),home:\(home)")

        }      

    }

}

示例下载:GDataXML.zip

二,使用DDXML

1,2,3步同上

4,添加bridge.h头文件并设置到编译参数里


1

2

#import "DDXML.h"

#import "DDXMLElementAdditions.h"

5,导入DDXML库文件

6,开始解析(ViewController.swift)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

import UIKit

class ViewController: UIViewController {

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        var label:UILabel = UILabel(frame:CGRectMake(100, 100,300,100));

        label.text = "输出结果在控制台"

        self.view.addSubview(label)

        //测试Swift调用Object的XML库功能

        testXML()

    }

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    func testXML() {

        //获取xml文件路径

        var path = NSBundle.mainBundle().pathForResource("users", ofType:"xml")

        //获取xml文件内容

        var xmlData = NSData(contentsOfFile:path!)

        

        //构造XML文档

        var doc = DDXMLDocument(data: xmlData, options:0, error:nil)

        

        //利用XPath来定位节点(XPath是XML语言中的定位语法,类似于数据库中的SQL功能)

        var users = doc.nodesForXPath("//User", error:nil) as [DDXMLElement]

        for user in users {

            let uid = user.attributeForName("id").stringValue()

            //DDXMLElementAdditions提供了elementForName获取单个节点,不用获取数组了

            let uname = user.elementForName("name").stringValue()

            //获取tel节点的子节点

            let telElement = user.elementForName("tel") as DDXMLElement

            let mobile = (telElement.elementForName("mobile") as DDXMLElement).stringValue()

            let home = (telElement.elementForName("home") as DDXMLElement).stringValue()

            println("User: uid:\(uid),uname:\(uname),mobile:\(mobile),home:\(home)")

        }       

    }

}

示例下载:DDXML.zip

时间: 2024-08-12 11:41:11

Swift - 解析XML格式数据(分别使用GDataXML和DDXML)的相关文章

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

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

利用XStream解析XML格式数据

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

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 =

解析JSON格式数据

 别想一下造出大海,必须先由小河川开始. 本讲内容:解析JSON格式数据 1)比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量.但缺点在于,它的语义性较差,看起来不如XML直观. 2)解析JSON格式的数据有多种方式,常用的两种是:使用官方提供的JSONObject和谷歌的开源库GSON. 示例一:解析服务器返回的数据 一.JSONObject解析方式 步骤: 1.在服务器中定义一个JSONArray,并将服务器返回的数据传入到JSONArray对象中 2.循环

R语言XML格式数据导入与处理

数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查找.相关一致性等,它仅仅是存储数据.事实上它与其他数据表现形式最大的不同是:它极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同. 针对XML格式数据,R语言XML包可以对其进行数据导入与处理,详见下面的案例说明. 案例1 直接输入一段标

Android使用DOM生成和输出XML格式数据

Android使用DOM生成和输出XML格式数据 本文主要简单讲解如何使用DOM生成和输出XML数据. 1. 生成和输出XML数据 代码及注释如下: try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); //创建一个新的Document对象,并非获取 Document xmlDocume

Oracle中对XML格式数据的操作,CLOB类型转换XMLType类型

今天遇到个问题,关于Oracle中xml格式数据的操作. 问题记录:需求上明确该字段类型为xmltype,要做的是解析该字段,但是由于数据库设计人员的问题,某些表中的该字段类型设计成了Clob类型. 解决方法: xmltype类型解析很容易:使用extractvalue函数即可,用法: select column_name1,column_name2,extractvalue(column_name3,'/nodeName1/nodeName2/nodeName3') from table; c