[Swift] XMLParser 정보

4928 단어 iOSSwiftXMLParser
XMLParser를 요약했습니다.
Yahoo! RSS( https://news.yahoo.co.jp/pickup/rss.xml )에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.

분석할 XML 정보


Yahoo! RSS의 XML은 다음과 같습니다.
<rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" version="2.0">
   <channel>
      <title>Yahoo!ニュース・トピックス - 主要</title>
      <link>https://news.yahoo.co.jp/</link>
      <description>Yahoo! JAPANのニュース・トピックスで取り上げている最新の見出しを提供しています。</description>
      <language>ja</language>
      <pubDate>Sun, 11 Aug 2019 02:17:25 +0900</pubDate>
      <item>
         <title>記事のタイトル</title>
         <link>記事のURL(Link)</link>
         <pubDate>配信時間</pubDate>
         <enclosure length="133" url="https://s.yimg.jp/images/icon/photo.gif" type="image/gif">          </enclosure>
         <guid isPermaLink="false">記事のURL(PermaLink)</guid>
      </item>
      <item>・・・</item>
   </channel>
</rss>

이번에는 기사의 제목과 URL 정보를 원하기 때문에 과 <link>의 요소를 얻는다.<br><h1> <span id="xmlの取得" class="fragment">XMLの取得</span></h1> <br>ViewController에서 XMLParserDelegate 프로토콜을 구현합니다.<pre><code>class ViewController: UIViewController, XMLParserDelegate, UITableViewDataSource, UITableViewDelegate { } </code></pre>URLSession을 사용하여 데이터를 통해 XML을 읽어들입니다.<br>검색 후 데이터의 내용을 분석합니다.<pre><code>let url: URL = URL(string:"https://news.yahoo.co.jp/pickup/rss.xml")! let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in    let parser: XMLParser? = XMLParser(data: data!)    parser!.delegate = self    parser!.parse() }) //タスク開始 task.resume() </code></pre><h1> <span id="xmlparserの解析処理" class="fragment">XMLParserの解析処理</span></h1> <br>원소를 가져올 때 호출된 함수에서 문장 제목과 같은 값을 가져옵니다.<pre><code>var check_title = [String]() var news_title = [String]() var link = [String]() var enclosure = [String]() var check_element = String() //解析_開始時 func parserDidStartDocument(_ parser: XMLParser) { } //解析_要素の開始時 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { if elementName == "enclosure" { enclosure.append(attributeDict["url"]!) } check_element = elementName } //解析_要素内の値取得 func parser(_ parser: XMLParser, foundCharacters string: String) { if string != "\n" { if check_element == "title" { //要素がtitleの場合値を取得する check_title.append(string) } if check_element == "link" { //要素がlinkの場合値を取得する link.append(string) } } } //解析_要素の終了時 func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if check_element == "title" { var title = check_title[0] for i in 1..<check_title.count { //titleの値が複数取得された場合一つにまとめる title = title + check_title[i] } check_title = [String]() news_title.append(title) } } //解析_終了時 func parserDidEndDocument(_ parser: XMLParser) { ![undefined]() } //解析_エラー発生時 func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { print("エラー:" + parseError.localizedDescription) } </code></pre><h1> <span id="実行結果" class="fragment">実行結果</span></h1> <br>XMLParser에서 가져온 값에 글의 요약이 표시됩니다.<br>제목을 선택하면 UIWebView에 글의 내용이 표시됩니다.<br><a href="#!" rel="noreferrer noopener nofollow"><img src="https://s1.md5.ltd/image/0b5e469ccc83fe5a1eac5cc0f566a5b2.gif" loading="lazy" class="check_url_is_full"/></a> <br><a href="https://github.com/MoriyamaNaoki/rss_ios" rel="noreferrer noopener nofollow">ソースコード</a> <br><h1> <span id="参考" class="fragment">参考</span></h1> <br><a href="https://developer.apple.com/documentation/foundation/xmlparserdelegate" class="autolink" rel="noreferrer noopener nofollow">https://developer.apple.com/documentation/foundation/xmlparserdelegate</a> <br><a href="https://mizumotok.hatenablog.jp/entry/2018/04/13/001002" class="autolink" rel="noreferrer noopener nofollow">https://mizumotok.hatenablog.jp/entry/2018/04/13/001002</a>

좋은 웹페이지 즐겨찾기