>백엔드 개발 >XML/RSS 튜토리얼 >XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

黄舟
黄舟원래의
2017-03-17 17:22:091769검색

이 튜토리얼에서는 NSXMLParser 객체 를 사용하여 xml 파일을 구문 분석합니다. 구문 분석 결과는 Table View로 표시됩니다. 이 튜토리얼은 Xcode 7.3.1의 iOS 9.3을 기반으로 작성되었습니다.
Xcode를 열고 새로운 단일 창 애플리케이션을 만듭니다. 이름은 IOS9XMLParserTutorial 이고 조직명과 조직 로고는 직접 결정합니다. 언어로 Swift를 선택하고 기기로 iPhone을 선택하세요.

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

스토리보드에서 뷰 컨트롤러를 제거하고 탐색 컨트롤러를 빈 아트보드로 드래그합니다. 이 네비게이션 컨트롤러는 자동으로 테이블 뷰 컨트롤러를 운반합니다. 초기 View Controller 를 삭제하면 해당 스토리보드 시작 지점도 제거됩니다. 따라서 먼저 새로 추가된 Navigation Controller를 선택하고 Attribute Inspector에서 "Initial View Controller" 확인란 을 새 스토리보드의 시작점으로 선택합니다.

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

View Controller의 제목 표시줄을 두 번 클릭하여 "Books"로 설정합니다. Table View Cell을 선택하고 Attributes Inspector에서 스타일 속성 을 Subtitle로 설정합니다.

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

스토리보드는 다음과 같습니다

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

이제 초기 View Controller를 삭제했으므로 ViewController.swift도 함께 삭제됩니다. iOS->Source->Cocoa Touch Class를 선택하고 새 파일을 추가하고 이름을 TableViewController로 지정하고 UITableViewController의 하위 클래스로 설정합니다.

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

스토리보드로 이동하여 Table View Controller를 선택하고 Identity Inspector에서 Custom Class 섹션을 TableViewController로 설정합니다.

XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)

iOS->Source->Swift 파일을 선택하여 새 파일을 추가하세요. 이름을 Books.xml

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
        }
    }
}
  1. 이 메소드는 구문 분석 객체가 ""의 시작 태그를 만날 때 트리거됩니다.

  2. 이 메소드는 파싱 ​​객체 ""의 종료 태그를 만나면

  3. 이 실행됩니다. 제목 및 작성자 태그가 구문 분석되고 해당 변수가 초기화됩니다.

프로젝트를 빌드하고 실행합니다. TableViewController에서 모든 책의 제목과 저자를 볼 수 있습니다.
XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)


위 내용은 XML 구문 분석에 대한 자세한 소개(그래픽 및 텍스트)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.