[Swift] 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>
Reference
이 문제에 관하여([Swift] XMLParser 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eito_2/items/8dc0c5ed48a353c2a1b2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<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>
Reference
이 문제에 관하여([Swift] XMLParser 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eito_2/items/8dc0c5ed48a353c2a1b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)