このチュートリアルでは、NSXMLParser object を使用して XML ファイルを解析します。解析結果はTable Viewで表示されます。このチュートリアルは、Xcode 7.3.1 上の iOS 9.3 上に構築されています。
Xcode を開いて、新しい単一ウィンドウ アプリケーションを作成します。名前はIOS9XMLParserTutorialで、組織名と組織ロゴは自分で決めます。言語として Swift を選択し、デバイスとして iPhone を選択します。
ビュー コントローラーをストーリーボードから削除し、ナビゲーション コントローラーを空のアートボードにドラッグします。このナビゲーション コントローラーには、自動的にテーブル ビュー コントローラーが組み込まれます。最初の View Controller を 削除すると、対応するストーリーボードの開始点 も削除されます。そのため、最初に新しく追加したナビゲーション コントローラーを選択し、新しいストーリーボードの開始点として属性インスペクターで [初期ビュー コントローラーである] チェックボックス
にチェックを入れます。有効な View Controller のタイトル バーをダブルクリックして、「Books」に設定します。テーブルビューセルを選択し、属性インスペクターでそのスタイルプロパティ
をSubtitleに設定します。 ストーリーボードはこんな感じ初期のViewControllerを削除したので、ViewController.swiftも一緒に削除できます。 iOS -> ソース -> Cocoa Touch Class
を選択し、新しいファイルを追加し、TableViewController という名前を付け、UITableViewController のサブクラスとして設定します。 ストーリーボードに移動し、テーブルビューコントローラーを選択し、アイデンティティインスペクターでカスタムクラスセクションをTableViewControllerに設定します。iOS -> ソース -> Swift ファイル
を選択し、新しいファイルを追加します。 Books.xml という名前を付けます Books.xml を開いて次のコードに置き換えます<?xml version="1.0"?> <catalog> <book id="1"> <title>To Kill a Mockingbird</title> <author>Harper Lee</author> </book> <book id="2"> <title>1984</title> <author>George Orwell</author> </book> <book id="3"> <title>The Lord of the Rings</title> <author>J.R.R Tolkien</author> </book> <book id="4"> <title>The Catcher in the Rye</title> <author>J.D. Salinger</author> </book> <book id="5"> <title>The Great Gatsby</title> <author>F. Scott Fitzgerald</author> </book> </catalog>iOS->Source->Swift File を選択して、XML ファイル内のさまざまな項目のデータとして新しいファイルを追加しますモデル。これを Book.swift と呼び、次のコードに置き換えましょう
import Foundation class Book { var bookTitle: String = String() var bookAuthor: String = String() }tableViewController.swift ファイルに移動し、次の 変数 を追加します。
var books: [Book] = [] var eName: String = String() var bookTitle = String() var bookAuthor = String()viewDidLoadメソッドを
override func viewDidLoad() { super.viewDidLoad() if let path = NSBundle.mainBundle().URLForResource("books", withExtension: "xml") { if let parser = NSXMLParser(contentsOfURL: path) { parser.delegate = self parser.parse() } } }NSXMLParserオブジェクトに書き換えて、バンドル内のbooks.xmlファイルを解析します。次のデータ ソースとテーブル ビューのデリゲート メソッドを追加します
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return books.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) let book = books[indexPath.row] cell.textLabel?.text = book.bookTitle cell.detailTextLabel?.text = book.bookAuthor return cell }すべての書籍のタイトルと著者データは書籍 配列 に保存され、テーブル ビューによって表示されます。次に、NSXMLParserのデリゲートメソッドを実装します。
// 1 func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { eName = elementName if elementName == "book" { bookTitle = String() bookAuthor = String() } } // 2 func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if elementName == "book" { let book = Book() book.bookTitle = bookTitle book.bookAuthor = bookAuthor books.append(book) } } // 3 func parser(parser: NSXMLParser, foundCharacters string: String) { let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) if (!data.isEmpty) { if eName == "title" { bookTitle += data } else if eName == "author" { bookAuthor += data } } }
ここで実際に解析処理が実行されます。タイトルと著者のタグが解析され、対応する変数が初期化されます。
プロジェクトをビルドして実行します。 TableViewController ですべての書籍のタイトルと著者を確認できます。
以上がXML 解析 (グラフィックスとテキスト) の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。