★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-bfduphmd-ma.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
目錄:[Swift]通天遁地Swiftios
本文將演示可擴展標記語言文檔的解析和編寫。git
首先確保在項目中已經安裝了所需的第三方庫。github
點擊【Podfile】,查看安裝配置文件。swift
1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'AEXML' 7 end
根據配置文件中的相關配置,安裝第三方庫。數組
而後點擊打開【DemoApp.xcworkspace】項目文件。安全
在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】微信
1 import UIKit 2 //引入已經安裝的第三方類庫 3 import AEXML 4 5 class ViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 //讀取和解析文檔 11 readXML() 12 //編寫XML文檔 13 writeXML() 14 } 15 16 //添加一個方法,用來讀取和解析文檔 17 func readXML() 18 { 19 //讀取項目中的待解析的文檔 20 guard let xmlPath = Bundle.main.path(forResource: "XMLExample", ofType: "xml"), 21 let data = try? Data(contentsOf: URL(fileURLWithPath: xmlPath)) else { 22 return 23 } 24 25 //添加一個異常捕捉語句,用來實現對文檔的解析 26 do 27 { 28 //初始化一個文檔對象,使用該文檔對象,存儲和加載數據。 29 let xmlDoc = try AEXMLDocument(xml: data, options: AEXMLOptions()) 30 print(xmlDoc.xml) 31 32 print("-----------------------------") 33 //經過一個循環語句,遍歷根節點中的全部子節點。 34 for child in xmlDoc.root.children 35 { 36 //並在控制檯輸出子節點的名稱 37 print("child.name:\(child.name)") 38 } 39 40 print("-----------------------------") 41 //從根節點中得到cats子節點, 42 //而後再得到該節點中的cat子節點, 43 //接着輸出該節點的值。 44 print(xmlDoc.root["cats"]["cat"].value as Any) 45 //得到並初始節點的詳細內容 46 print(xmlDoc.root["cats"]["cat"].string) 47 //從根節點中得到dogs子節點, 48 //而後再得到該節點中的dog子節點, 49 //接着輸出該節點的值。 50 print(xmlDoc.root["dogs"]["dog"].last?.value as Any) 51 //得到該節點中的第三個節點,並輸出該節點的詳細內容。 52 print(xmlDoc.root["dogs"].children[2].string) 53 54 print("--------------all---------------") 55 //得到cats節點下的全部指定的子節點,並存儲在一個數組中。 56 if let cats = xmlDoc.root["cats"]["cat"].all 57 { 58 //對由子節點組成的數組進行遍歷 59 for cat in cats 60 { 61 //而後輸出遍歷到的元素的值 62 if let name = cat.value 63 { 64 print(name) 65 } 66 } 67 } 68 69 //過濾cats節點下的全部指定的子節點 70 print("---------------withValue--------------") 71 //並得到擁有特定值的cat節點 72 if let cats = xmlDoc.root["cats"]["cat"].all(withValue: "Tinna") 73 { 74 //對由子節點組成的數組進行遍歷 75 for cat in cats 76 { 77 //並輸出節點的詳細內容 78 print(cat.string) 79 } 80 } 81 82 print("-------------withAttributes----------------") 83 //過濾cats節點下的全部指定的子節點,並得到擁有特定屬性的子節點。 84 if let cats = xmlDoc.root["cats"]["cat"].all(withAttributes: ["breed" : "Domestic", "color" : "yellow"]) 85 { 86 //對由子節點組成的數組進行遍歷, 87 for cat in cats 88 { 89 //並輸出節點的詳細內容 90 print(cat.string) 91 } 92 } 93 94 print("--------------attributes---------------") 95 //對dogs節點下的全部子節點,進行遍歷操做。 96 for dog in xmlDoc.root["dogs"]["dog"].all! 97 { 98 //得到該節點的顏色屬性 99 if let color = dog.attributes["color"] 100 { 101 //若是顏色屬性的值爲白色 102 if color == "white" 103 { 104 //則輸出當前顏色的詳細內容 105 print(dog.string) 106 } 107 } 108 } 109 110 print("-----------------------------") 111 //經過count屬性,能夠得到同名節點的數量。 112 print(xmlDoc.root["cats"]["cat"].count) 113 //並輸出指定節點的品牌屬性 114 print(xmlDoc.root["cats"]["cat"].attributes["breed"]!) 115 //得到並輸出指定節點的標籤內容, 116 //該內容中的回車符和將被去除 117 print(xmlDoc.root["cats"]["cat"].xmlCompact) 118 } 119 catch 120 { 121 //輸出錯誤信息 122 print("\(error)") 123 } 124 } 125 126 //添加一個方法,用來編寫XML文檔 127 func writeXML() 128 { 129 //初始化一個文檔對象 130 let soapRequest = AEXMLDocument() 131 //建立一個字典對象,做爲文檔的命名空間 132 let attributes = ["xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance", 133 "xmlns:xsd" : "http://www.w3.org/2001/XMLSchema"] 134 135 //往文檔中添加一個指定名稱和屬性的節點 136 let envelope = soapRequest.addChild(name: "soap:Envelope", attributes: attributes) 137 //繼續往該節點添加一個名爲"Employees"的節點 138 let employees = envelope.addChild(name: "Employees") 139 //往"Employees"子節點添加一個名爲"Managers"的節點 140 let managers = employees.addChild(name: "Managers") 141 //往"Managers"節點添加一個指定名稱和年齡等屬性的子節點 142 managers.addChild(name: "Manager", attributes:["Name":"Jerry", "age":"40"]) 143 //往"Managers"節點添加一個指定名稱和年齡等屬性的子節點 144 managers.addChild(name: "Manager", attributes:["Name":"Peter", "age":"44"]) 145 146 //往"Employees"子節點添加一個名爲"Engineers"的節點 147 let engineers = employees.addChild(name: "Engineers") 148 //往"Engineers"節點添加一個指定名稱和年齡等屬性的子節點 149 engineers.addChild(name: "Engineer", attributes:["Name":"Bill", "age":"29"]) 150 engineers.addChild(name: "Engineer", attributes:["Name":"Somus", "age":"31"]) 151 152 print(soapRequest.xml) 153 } 154 155 override func didReceiveMemoryWarning() { 156 super.didReceiveMemoryWarning() 157 // Dispose of any resources that can be recreated. 158 } 159 }