import UIKit
class ViewController: UIViewController, XMLParserDelegate {
var xmlParser = XMLParser()
var currentElement = ""
var items = [[String : String]]()
var item = [String : String]()
var covidgubun = "" //시도명
var covidincDec = "" //전일 대비 증감 수
var coviddefCnt = "" //코로나 확진자 수
var covidisolIngCnt = "" //현재 격리중인 환자 수
override func viewDidLoad() {
super.viewDidLoad()
requestCovidInfo()
}
func requestCovidInfo() {
//MARK: - view가 load 되는 현재 시간 저장
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMdd"
let current_date_string = formatter.string(from: Date())
//print(current_date_string)
let url = "http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19SidoInfStateJson?serviceKey=2yD7EAVjVn6s7TOB869TohgRaubtsfz2hXk2RZKdv%2FHPLcJiFtZobJXfo2w7W4d%2F55NE6nJccDXb9km9qifGRA%3D%3D&pageNo=1&numOfRows=10&startCreateDt=\(current_date_string)&endCreateDt=\(current_date_string)"
guard let xmlParser = XMLParser(contentsOf: URL(string: url)!) else { return }
xmlParser.delegate = self
xmlParser.parse()
}
//MARK: - XML 파서가 시작 테그를 만나면 호출됨
public func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElement = elementName
if elementName == "item" {
item = [String : String]()
covidgubun = ""
covidincDec = ""
coviddefCnt = ""
covidisolIngCnt = ""
//print("didStartElement")
}
}
//MARK: - XML 파서가 종료 테그를 만나면 호출됨
public func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "item" {
item["gubun"] = covidgubun
item["incDec"] = covidincDec
item["defCnt"] = coviddefCnt
item["isolIngCnt"] = covidisolIngCnt
items.append(item)
//print("didEndElement")
}
}
//MARK: - 현재 테그에 담겨있는 문자열 전달
public func parser(_ parser: XMLParser, foundCharacters string: String) {
//print("foundCharacters")
if currentElement == "gubun" {
covidgubun = string
print("시도명: \(covidgubun)")
//print("foundCharacters1")
} else if (currentElement == "incDec") {
covidincDec = string
print("오늘 확진자 수 :\(covidincDec)")
//print("foundCharacters2")
} else if (currentElement == "defCnt") {
coviddefCnt = string
print("총 확진자 수:\(coviddefCnt)")
//print("foundCharacters2")
} else if (currentElement == "isolIngCnt") {
covidisolIngCnt = string
print("격리중인 환자 수:\(covidisolIngCnt)")
print("-----------------------")
//print("foundCharacters2")
}
}
}
var currentElement = "" //현재 Element
var items = [[String : String]]()
var item = [String : String]()
items와 item은 xml 파일을 보고 작성하였다. xml 파일을 보게되면 items라는 Dictional Array안에 여러개의 item Dictionary이 있고 그 내부에 gubun, incDec, defCnt등등의 개체가 있는 것을 확인 할 수 있다.
<items>
| <item>
| | <createDt>2021-10-13 09:48:05.982</createDt>
| | <deathCnt>15</deathCnt>
| | <defCnt>6197</defCnt>
| | <gubun>검역</gubun>
| | <gubunCn>隔離區</gubunCn>
| | <gubunEn>Lazaretto</gubunEn>
| | <incDec>5</incDec>
| | <isolClearCnt>5990</isolClearCnt>
| | <isolIngCnt>192</isolIngCnt>
| | <localOccCnt>0</localOccCnt>
| | <overFlowCnt>5</overFlowCnt>
| | <qurRate>-</qurRate>
| | <seq>12663</seq>
| | <stdDay>2021년 10월 13일 00시</stdDay>
| | <updateDt>null</updateDt>
| </item>
</items>
public func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
currentElement = elementName
if elementName == "item" {
item = [String : String]()
covidgubun = ""
covidincDec = ""
coviddefCnt = ""
covidisolIngCnt = ""
//print("didStartElement")
}
}
XML 파서가 시작 테그를 만났을 때 태그이름이 item이라면 선언 변수들을 초기화 해준다.
ppublic func parser(_ parser: XMLParser, foundCharacters string: String) {
//print("foundCharacters")
if currentElement == "gubun" {
covidgubun = string
print("시도명: \(covidgubun)")
//print("foundCharacters1")
} else if (currentElement == "incDec") {
covidincDec = string
print("오늘 확진자 수 :\(covidincDec)")
//print("foundCharacters2")
} else if (currentElement == "defCnt") {
coviddefCnt = string
print("총 확진자 수:\(coviddefCnt)")
//print("foundCharacters2")
} else if (currentElement == "isolIngCnt") {
covidisolIngCnt = string
print("격리중인 환자 수:\(covidisolIngCnt)")
print("-----------------------")
//print("foundCharacters2")
}
}
현재 테그에 담겨있는 문자열을 각각 문자에 따라서 전달한다.
info - open As - Source code로 열어서 아래의 코드를 사진의 위치(첫 dict 다음에) 작성해준다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>