이 튜토리얼에서는 NSXMLParser 객체 를 사용하여 xml 파일을 구문 분석합니다. 구문 분석 결과는 Table View로 표시됩니다. 이 튜토리얼은 Xcode 7.3.1의 iOS 9.3을 기반으로 작성되었습니다.
Xcode를 열고 새로운 단일 창 애플리케이션을 만듭니다. 이름은 IOS9XMLParserTutorial 이고 조직명과 조직 로고는 직접 결정합니다. 언어로 Swift를 선택하고 기기로 iPhone을 선택하세요.
스토리보드에서 뷰 컨트롤러를 제거하고 탐색 컨트롤러를 빈 아트보드로 드래그합니다. 이 네비게이션 컨트롤러는 자동으로 테이블 뷰 컨트롤러를 운반합니다. 초기 View Controller 를 삭제하면 해당 스토리보드 시작 지점도 제거됩니다. 따라서 먼저 새로 추가된 Navigation Controller를 선택하고 Attribute Inspector에서 "Initial View Controller" 확인란 을 새 스토리보드의 시작점으로 선택합니다.
View Controller의 제목 표시줄을 두 번 클릭하여 "Books"로 설정합니다. Table View Cell을 선택하고 Attributes Inspector에서 스타일 속성 을 Subtitle로 설정합니다.
스토리보드는 다음과 같습니다
이제 초기 View Controller를 삭제했으므로 ViewController.swift도 함께 삭제됩니다. iOS->Source->Cocoa Touch Class를 선택하고 새 파일을 추가하고 이름을 TableViewController로 지정하고 UITableViewController의 하위 클래스로 설정합니다.
스토리보드로 이동하여 Table View Controller를 선택하고 Identity Inspector에서 Custom Class 섹션을 TableViewController로 설정합니다.
iOS->Source->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 파일을 선택하여 새 파일 DataModel을 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!