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
- iOS – XML解析iOSXML
- java EE開發之Servlet第五課:xml解析JavaServletXML
- python之XML解析PythonXML
- GEOJSON資料格式解析JSON
- Python XML解析之DOMPythonXML
- Flutter資料解析Map格式Flutter
- iOS開發圖片格式選擇iOS
- 探索多種資料格式:JSON、YAML、XML、CSV等資料格式詳解與比較JSONYAMLXML
- ORACLE 資料塊格式深入解析Oracle
- iOS開發 iOS整合FFmpeg及視訊格式轉碼iOS
- iOS開發 面向切面程式設計之 Aspects 原始碼解析iOS程式設計原始碼
- 【spring原始碼系列】之【xml解析】Spring原始碼XML
- C#解析Matrix Marke資料格式C#
- iOS開發之FuckingBlockSyntax!iOSBloC
- Python資料處理(一):處理 JSON、XML、CSV 三種格式資料PythonJSONXML
- ABAP和XML資料格式互相轉換的兩種方式XML
- ads1299多通道資料格式解析
- SAP UI5 應用的 OData XML 格式的後設資料請求解析原理,基於 DOMParserUIXML
- iOS開發之逆向工程iOS
- iOS之Wifi開發探究iOSWiFi
- hrsc2016資料集xml格式轉換為yolo格式,附下載連結XMLYOLO
- Xml解析XML
- Flutter 之資料解析Flutter
- HarmonyOS NEXT應用開發之Axios獲取解析網路資料iOS
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- Flutter開發之JSON解析FlutterJSON
- xml是什麼格式的檔案 xml檔案怎麼開啟XML
- Android開發 - Parcelable 介面實現不同元件之間傳遞資料解析Android元件
- ArkTS 中的 XML 解析與生成:應用開發實戰XML
- iOS開發之 Autolayout 詳解iOS
- iOS開發之彈窗管理iOS
- iOS開發之XLForm的使用iOSORM
- Java解析XMLJavaXML
- go 解析xmlGoXML
- 教育大資料之資料開發系統大資料
- iOS開發基礎146-深入解析WKWebViewiOSWebView
- 藍芽Beacon廣播資料包格式以及解析藍芽
- MFC介面開發類庫BCG Pro for MFC幫助文件:CBCGPEditCtrl的XML格式XML