溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

發(fā)布時間:2021-09-17 14:09:53 來源:億速云 閱讀:158 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“如何使用NSXMLParser 對象對xml文件進(jìn)行解析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何使用NSXMLParser 對象對xml文件進(jìn)行解析”這篇文章吧。


打開 Xcode 并且新建一個單視窗應(yīng)用。名字就叫 IOS9XMLParserTutorial,組織名字和組織標(biāo)識自己定。語言選 Swift,設(shè)備只選 iPhone。

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

把  View Controller  從 Storyboard 中移除,并拖一個 Navigation Controller 到空的畫板里。這個 Navigation Controller  會自動攜帶一個 Table View Controller。當(dāng)你把初始的 View Controller  刪除時相應(yīng)的故事板起點(diǎn)也被移除了。所以我們先選中新添加的 Navigation Controller 在 Attribute Inspector 的 "Is Initial View Controller" 復(fù)選框打上勾作為新的故事板起點(diǎn)。

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

雙擊 able View Controller 的 Title Bar 將其設(shè)置為 “Books”。選擇 Table View Cell 然后在 Attributes Inspector 中將它的 Style 屬性設(shè)為 Subtitle。

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

Storyboard 長這樣

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

既然我們刪除了初始 View Controller ,ViewController.swift 也可以一起刪除了。選擇 iOS->Source->Cocoa Touch Class 添加一個新的文件,命名為 TableViewController,并且設(shè)置它為 UITableViewController 的子類。

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

前往 Storyboard 中選中 Table View Controller,在 Identity inspector 中將 Custom Class 部分設(shè)置為 TableViewController。

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

選擇 iOS->Source->Swift File,添加一個新的文件。命名為 Books.xml

如何使用NSXMLParser 對象對xml文件進(jìn)行解析

打開 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 文件中不同項(xiàng)的數(shù)據(jù)模型。我們叫它 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 方法復(fù)寫為

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 對象解析 bundle 中的 books.xml 文件。添加以下 table View 的數(shù)據(jù)源及委托方法

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
}

所有書的標(biāo)題和作者數(shù)據(jù)會保存在 books 數(shù)組中并且由 Table View 呈現(xiàn)。接著,實(shí)現(xiàn) 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. 該方法在解析對象碰到 "<book>" 的起始標(biāo)簽時出觸發(fā)

  2. 該方法在解析對象碰到 "<book>" 的結(jié)尾標(biāo)簽時出觸發(fā)

  3. 這里解析過程真正執(zhí)行。標(biāo)題和作者標(biāo)簽會被解析并且相應(yīng)的變量將會初始化。

構(gòu)建并運(yùn)行項(xiàng)目。在 TableViewController 中能看到所有書的標(biāo)題和作者。
如何使用NSXMLParser 對象對xml文件進(jìn)行解析

以上是“如何使用NSXMLParser 對象對xml文件進(jìn)行解析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

xml
AI