4

这是我的代码块,

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循环,但即使这样也行不通,

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

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

帮助将不胜感激。

4

1 回答 1

5

我意识到这个答案是几个月后才出现的,但是当这个问题发布时,你可能一直在使用旧版本的 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)

您也可以通过这种方式从每个元素中获取属性。

于 2015-06-20T23:25:13.140 回答