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用得最多的地方就是客戶端用SOAP去訪問WebService,此時WebService很多返回的都是xml。
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!
相關文章
- NPM酷庫051:xml2js,解析XML格式資料NPMXMLJS
- 資料格式之戰:JSON vs XMLJSONXML
- IOS 學習之XML解析(一)iOSXML
- iOS – XML解析iOSXML
- iOS - XML解析iOSXML
- XML資料解析XML
- iOS開發之原始碼解析 - MasonryiOS原始碼
- iOS開發之原始碼解析 - MBProgressHUDiOS原始碼
- java EE開發之Servlet第五課:xml解析JavaServletXML
- 資料庫開發(20)XML資料庫XML
- HarmonyOS NEXT應用開發之Axios獲取解析網路資料iOS
- iOS 開發之解析Json檔案iOSJSON
- iOS開發之模擬介面假資料iOS
- iOS開發之命令列的魅力(格式整理篇)iOS命令列
- XML資料庫開發手冊XML資料庫
- Android之深入理解xml資料的pull解析AndroidXML
- xml解析之domXML
- Flutter資料解析Map格式Flutter
- GEOJSON資料格式解析JSON
- Swift學習筆記(2)網路資料交換格式(XML,JSON)解析 [iOS實戰 入門與提高卷]Swift筆記XMLJSONiOS
- Dom4j解析XML資料XML
- JAVA-使用SAX解析XML資料JavaXML
- python之XML解析PythonXML
- ORACLE 資料塊格式深入解析Oracle
- 資料庫表格轉換成XML格式方法!資料庫XML
- XML資料庫開發手冊總結XML資料庫
- iOS開發-JSON解析iOSJSON
- iOS開發-XML&JSON淺析iOSXMLJSON
- iOS開發圖片格式選擇iOS
- Android 中 XML 資料解析詳解AndroidXML
- spring mvc實現Restful返回xml格式資料SpringMVCRESTXML
- Android中XML格式資料的簡單使用AndroidXML
- C#解析Matrix Marke資料格式C#
- Python XML解析之DOMPythonXML
- iOS資料解析框架搭建iOS框架
- 探索多種資料格式:JSON、YAML、XML、CSV等資料格式詳解與比較JSONYAMLXML
- iOS開發系列--UITableView全面解析iOSUIView
- iOS開發 面向切面程式設計之 Aspects 原始碼解析iOS程式設計原始碼