공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 swift3 XMLParsing xml 파싱하는 방법에 대해 알아보겠습니다.
먼저 데이터를 담고 있는 xml 파일이 필요하겠죠?
https://sam.ple.com/data/sample.xml
처럼 xml 파일이 존재한다고 가정해보겠습니다.
<school>
<data>
<grade>1학년</grade>
<classes>5학급</classes>
<count>130명</count>
</data>
<data>
<grade>2학년</grade>
<classes>5학급</classes>
<count>130명</count>
</data>
<data>
<grade>3학년</grade>
<classes>4학급</classes>
<count>130명</count>
</data>
<data>
<grade>4학년</grade>
<classes>4학급</classes>
<count>130명</count>
</data>
<data>
<grade>5학년</grade>
<classes>4학급</classes>
<count>130명</count>
</data>
<data>
<grade>6학년</grade>
<classes>4학급</classes>
<count>130명</count>
</data>
</school>
위 파일을 ios 에서 받아와 간단히 프린트하는 거 까지만 보겠습니다.
먼저 XML을 받아와 파싱을 하려면 XMLParser 를 사용합니다.
ViewController.swift 파일만 보겠습니다.
import UIKit class ViewController : UIViewController, XMLParserDelegate { var elementTemp = "" var datalist : [[String:String]] = [[:]] var detailData : [String:String] = [:] var blank: Bool = false override func viewDidLoad() { super.viewDidLoad() let baseURL = "https://sam.ple.com/data/sample.xml" // xml 파일이 있는 url 주소입니다. let xmlParser = XMLParser(contentsOf: URL(string: baseURL)!) xmlParser!.delegate = self xmlParser!.parse() } override func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String:String] = [:]) { print("didStartElement : \(elementName)") // * elementTemp = elementName blank = true } override func parser(_ parser: XMLParser, foundCharacters string: String) { print("foundCharacters : \(string)") // * if blank == true && elementTemp != "data" && elementTemp != "school" { detailData[elementTemp] = string} } override func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qua;ifiedName qName: String?) { if elementName == "data" { datalist += [detailData] } blank = false print("didEndElement : \(elementName)") // * } }
|
위에처럼 하고 print()//*가 붙어있는 코드만 있을 때
실행을 해보시면 콘솔에 아마 아래처럼 나올거에요.
didStartElement : school
foundCharacters :
didStartElement : data
foundCharacters :
didStartElement : grade
foundCharacters : 1학년
didEndElement : grade
......
foundCharacters 에 값이 없는 이유는 공백도 값으로 잡기 때문에
저거에 대한 처리도 필요합니다.
이제 저 값들을 필요한 곳에 맞게 처리를 해주면 됩니다.
위 parser 함수들은 순서가 있는데요.
매개 변수 레이블이 didStartElement 가 있는 함수가 1번
foundCharacters 가 2번
didEndElement 가 3번입니다.
1번은 <> 태그를 발견했을 때
2번은 그 태그의 값을
3번은 </> 태그를 발견했을 때 호출됩니다.
때문에 1번과 3번에서 필요한 태그들만 값을 처리할 수 있도록 하는 코드가 필요하고
2번에서 가져온 값을 어딘가에 저장하는 코드가 필요하게 됩니다.
위 예제 같은 경우는 UITableView와 같이 사용해서 학년 별 학급과 총 학생 수를 보여주는
앱을 만들 수도 있겠죠?
이상입니다.
다음 포스팅에서는 JSONParsing 하는 방법에 대해 공부하겠습니다.
'IOS(iPhone)' 카테고리의 다른 글
IOS UIView 에 border 추가하기, 버튼, 레이블 등에 테투리 표시하는 방법 (0) | 2017.08.16 |
---|---|
ios swift3 alertDialog 경고창띄우는 방법 (0) | 2017.08.10 |
ios swift3 JSONParsing JSON 파싱 하는 방법 (0) | 2017.08.09 |
ios swift3 ImageView 이미지 동그랗게 만들기 (0) | 2017.08.07 |
ios swift3 하드코딩으로 UI 구성할 때 (0) | 2017.07.27 |