- This topic has 0개 답변, 1명 참여, and was last updated 4 years, 8 months 전에 by 남수.
-
글쓴이글
-
-
남수참가자
- 글작성 : 13
- 답글작성 : 2
XML이란..?
Extensible Markup Language의 종류중 대표적인 언어에요Markup Language 란?
태그, 등을 이용하여 문서나 데이터의 구조를 명기하는 언어의 한 가지라고 사전에 나오네요
<p>, <br>, <div> 이런 태그들 본적 있으시죠?? 그런 태그를 사용한 거에요
대표적으로 HTML, XML언어가 있죠HTML 문자열로 응답을 받을 때 파싱받아서 앱에 적용 하고 싶은경우가 생길 수 있어요
RSS(Rich Site Summary)가 대표적인 예로 있겠네요!
RSS는 뉴스나 블로그 사이트에서 주로 사용하는 콘텐츠 표현 방식 이라고해요아무튼!! 이러한 XML로 이루어진 응답을 파싱해보는 방법에 대해서 알아보려고 해요
예시로 구글뉴스의 RSS주소를 가져왔어요
아래의 주소를 치면 사진과같이 응답이 와요https://news.google.com/rss?hl=ko&gl=KR&ceid=KR:ko
이러한 데이터중에서
원하는 데이터가 <title>태그에 있을 수 도있고, <link>태그에 있을 수 도있고
태그로 둘러쌓인 문자열만 골라서 가져와야겠죠??이 작업을 편하게 할 수 있도록 Xcode에서 지원해주는게
바로 XMLParser이에요제일 기본적인 XMLParser사용법은
var parser: XMLParser guard let url = URLComponents(string: rssURL)?.url else { return } parser = XMLParser(contentsOf: url) parser.delegate = self parser.parse()
URL타입의 매개변수를 넣어줘서 XMLParser객체를 생성하고
parse() 를 통해서
넣어준 URL의 응답을 파싱하기 시작해요
파싱받는 값은XMLParserDelegate 에 로직을 구현해야해요
// 태그의 시작
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:])// 태그의 끝
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)// 태그사이의 문자열
func parser(_ parser: XMLParser, foundCharacters string: String)// 에러시, abortParsing()사용시
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error)<title>타이틀입니다</title>
이런 XML이 있다면
didStartElement elementName => title
didEndElement elementName => title
foundCharacters string => 타이틀입니다이렇게 값을 받을 수 있어요
그리고 파싱을 그만두고싶다!?
abortParsing() 을 통해서 멈추게 할 수 있어요
이 함수를 실행 시키면
func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) delegate함수를 통해서
정보가 전달된다고 하네요문자열을 가져올 때
주의할점이 있어요
xml태그끝에 빈칸을 인식하기때문에
데이터가 아닌 빈배열저장 되는 문제가 발생해요(예시)
<country>한국</country>
에서 한국과 </country>뒤의 공백문자를인식해요해결방법으로는
Bool형 변수 트리거 방식
혹은
trimmingCharacters(in: .whitespacesAndNewlines) 을 이용해서 앞뒤 공백을 제거할 수도 있어요2020-04-04 오후 4:34 #6104
-
-
글쓴이글
- 답변은 로그인 후 가능합니다.