簡體   English   中英

使用SWXMLHash for Swift迭代XML文件

[英]Iterating Through an XML file using SWXMLHash for Swift

這是我的代碼塊,

var a = 0;

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in

    if error != nil {
        println("error=\(error)")
        return
    }

    responseString = NSString(data: data, encoding: NSUTF8StringEncoding)!

    let xmlWithNamespace = responseString
    var xml = SWXMLHash.parse(xmlWithNamespace)

    var entity = xml["row"]["ftc"]["Entity"][a]

    if entity.element?.attributes["ID"] != nil {

        entity = xml["row"]["ftc"]["Entity"][a]
        //println(a)

        println(entity.element?.attributes["ID"])
        a++
    } else {
        println("Print We Have Reached Our Limit")
    }

}
task.resume()

我試圖讓一個迭代器通過並打印出這些內部的所有子項和屬性並將它們存儲在變量中。

我一直在尋找一些幫助,但Swift和XML只是一個令人頭痛的問題 - 任何幫助讓我迭代通過節點會很驚人,我嘗試使用while循環,但它只是在給我節點后崩潰了程序。

我試圖在循環中使用它,但即使這樣也行不通,

while entity.element?.attributes["ID"] != nil {
    entity = xml["row"]["ftc"]["Entity"][a]
    //println(a)

    println(entity.element?.attributes["ID"])
    a++
    break
}

幫助將不勝感激。

幾個月后我才意識到這個答案,但是當你發布這個問題時,你可能已經使用了舊版本的SWXMLHash。 我向SWXMLHash 添加了一個名為children 的新方法 ,它允許您枚舉子元素。 鑒於此,您可以使用遞歸來迭代所有元素。

以下是可能有用的代碼段:

let xml = SWXMLHash.parse(xmlWithNamespace)

func enumerate(indexer: XMLIndexer, level: Int) {
    for child in indexer.children {
        var name = child.element!.name
        println("\(level) \(name)")

        enumerate(child, level + 1)
    }
}

enumerate(xml, 0)

您也可以通過這種方式從每個元素中獲取屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM