일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ImageSlider
- 새싹후기
- process
- MVVM
- 스위프트
- WidgetTree
- Swift
- xcode
- SwiftUI
- IOS
- 조건문
- 청년취업사관학교후기
- flutter
- collectionView
- CS193p
- 프로그래머스
- 스터디
- UserDefault
- UIKit
- 알고리즘
- flutter #state # stateful #stateless
- 프로젝트회고
- 백준
- GIT
- 오늘의 색상
- Masil
- 코딩테스트
- xml
- colorofdays
- stanford
- Today
- Total
개발을 시작하는 이야기
04. XMLParser 01 본문
개인적으로 이번 프로젝트를 진행하면서 가장 큰 복병이였다.
TrandMedia 프로젝트에서 이미 JSON 데이터를 다뤄보았으니 XML도 별반 다를바 없을거라 생각했었다.
하지만 그당시의 내 실력은 너무도 작고 귀엽고 하찮았기에 XML을 두고 한 삽질은 오래도 걸렸다.
일단 JSON과 XML의 가장 큰 차이점은 불러오는 데이터의 방식이 확연히 다르다
XML은 'eXtensible Markup Language'의 약자로 HTML과 매우 비슷한 문자 양식을 갖고 있다.
시작과 종료에 태그를 사용하고 <> 꺽쇠 괄호를 사용해서 데이터를 감싸기 때문에 Swift에서 데이터를 사용하기 위해서는 앞뒤의 꺽쇠 괄호를 처리해주어야 한다. 이걸 Parsing이라고 하고, Parsing을 하는 processor가 Parser라고 한다.
프로그램을 컴파일 하는 과정에서 특정 프로그래밍 언어가 제시하는 문법을 잘 지켜서 작성되어 있다면 문서를 읽고 태그명, 속성명, 속성값 및 엘리먼트 내용을 분리해주는 방식이다.
Swift의 XMLParser는 XMLParserDelegate를 통해서 진행되었다.
XML 예시
<?xml version="1.0" encoding="utf-8"?>
<result>
<totalCnt>16419</totalCnt>
<pageUnit>1</pageUnit>
<pageIndex>1</pageIndex>
<item>
<sn>1</sn>
<no>1</no>
<ccmaName>
<![CDATA[국보]]>
</ccmaName>
<crltsnoNm>1</crltsnoNm>
<ccbaMnm1>
<![CDATA[서울 숭례문]]>
</ccbaMnm1>
<ccbaMnm2>
<![CDATA[서울 崇禮門]]>
</ccbaMnm2>
<ccbaCtcdNm>
<![CDATA[서울]]>
</ccbaCtcdNm>
<ccsiName>
<![CDATA[중구]]>
</ccsiName>
<ccbaAdmin>
<![CDATA[문화재청 덕수궁관리소]]>
</ccbaAdmin>
<ccbaKdcd>11</ccbaKdcd>
<ccbaCtcd>11</ccbaCtcd>
<ccbaAsno>00010000</ccbaAsno>
<ccbaCncl>N</ccbaCncl>
<ccbaCpno>1111100010000</ccbaCpno>
<longitude>126.975312652739</longitude>
<latitude>37.559975221378</latitude>
</item>
</result>
반면에 JSON의 경우
비교적 최신에 나온 형식으로 알고 있는데, XML보다 비교적으로 사용하기 쉽고, 적은 메모리를 사용하며, 맵핑을 생성하지 않아도 되기 때문에 최근 기업에서 제공하는 대부분의 OPEN API의 경우 JSON 방식을 채택하고 있는 반면, XML 같은 경우는 비교적 오래된 관공서에서 제공되는 공공API 들이 주로 사용하고 있다고 한다.
JSON 예시
{
"adult": false,
"backdrop_path": "/vIgyYkXkg6NC2whRbYjBD7eb3Er.jpg",
"belongs_to_collection": {
"id": 558216,
"name": "Venom Collection",
"poster_path": "/670x9sf0Ru8y6ezBggmYudx61yB.jpg",
"backdrop_path": "/rhLspFB1B8ZCkWEHFYmc3NKagzq.jpg"
},
"budget": 110000000,
"genres": [
{
"id": 878,
"name": "Science Fiction"
},
{
"id": 28,
"name": "Action"
},
{
"id": 12,
"name": "Adventure"
}
],
"homepage": "<https://www.venom.movie>",
"id": 580489,
"imdb_id": "tt7097896",
"original_language": "en",
"original_title": "Venom: Let There Be Carnage",
"overview": "After finding a host body in investigative reporter Eddie Brock, the alien symbiote must face a new enemy, Carnage, the alter ego of serial killer Cletus Kasady.",
"popularity": 1067.665,
"poster_path": "/rjkmN1dniUHVYAtwuV3Tji7FsDO.jpg",
"production_companies": [
{
"id": 7505,
"logo_path": "/837VMM4wOkODc1idNxGT0KQJlej.png",
"name": "Marvel Entertainment",
"origin_country": "US"
},
{
"id": 5,
"logo_path": "/71BqEFAF4V3qjjMPCpLuyJFB9A.png",
"name": "Columbia Pictures",
"origin_country": "US"
},
{
"id": 84041,
"logo_path": "/nw4kyc29QRpNtFbdsBHkRSFavvt.png",
"name": "Pascal Pictures",
"origin_country": "US"
},
{
"id": 53462,
"logo_path": null,
"name": "Matt Tolmach Productions",
"origin_country": "US"
},
{
"id": 166230,
"logo_path": null,
"name": "Avi Arad Productions",
"origin_country": "US"
}
],
"production_countries": [
{
"iso_3166_1": "US",
"name": "United States of America"
}
],
"release_date": "2021-09-30",
"revenue": 500000000,
"runtime": 97,
"spoken_languages": [
{
"english_name": "Spanish",
"iso_639_1": "es",
"name": "Español"
},
{
"english_name": "English",
"iso_639_1": "en",
"name": "English"
}
],
"status": "Released",
"tagline": "",
"title": "Venom: Let There Be Carnage",
"video": false,
"vote_average": 7.1,
"vote_count": 6469
}
XMLParser에 대해 알아보며 참고했던 자료들
'개발 이야기 > 우리동네 문화유산 :: JHeritage' 카테고리의 다른 글
05. Xcode Push Error, API 콜제한 (0) | 2022.03.09 |
---|---|
04.XMLParser 02 (0) | 2022.03.08 |
03.개발환경 구축 및 API연구? (0) | 2022.03.04 |
02. 기획과 디자인 레퍼런스 찾기 (0) | 2022.03.03 |
01. 프로젝트 소개 (0) | 2022.03.02 |