SWXMLHash迭代错误

时间:2016-01-08 11:40:21

标签: xml xcode swift alamofire swxmlhash

我是Swift的新手,用网络请求编写我的第一个应用程序。出于测试目的,我使用框架Alamofire和SWXMLHash创建了一个应用程序,用于解析请求中的xml数据。

一般情况下,它运作正常(或多或少,我不知道如何使用完成手柄Alamofire,我甚至不明白这是什么...... 羞辱我

但是现在它是我的第一次xml-Structure有多个同名的项目,我想使用他们的" Name"将所有这些项目迭代到一个数组。属性。

让我举一个XML示例:

<Root>
  <Results>
   <Url Name="Test1"></Url>
   <Url Name="Test2"></Url>
   <Url Name="Test3"></Url>
  </Results>
</Root>

所以我的数组应该是这样的:

["Test1", "Test2", "Test3"]

到目前为止,我的代码无效...我得到一个错误,解开xml数据返回nil。这是整个文件的代码:

import WatchKit
import Foundation
import Alamofire
import SWXMLHash

public var url = "http://www.testurl.com"
public var user = "testuser"

class InterfaceController: WKInterfaceController {

 @IBAction func selectedAccountActivate() {
        campaignLister()
    }

    func campaignLister(){
        Alamofire.request(.GET, url, parameters: ["function":"catalog", "user":user, "pwd":"1234"])
            .response { (request, response, data, error) in
                //print(response)
                let xml = SWXMLHash.parse(data!)

                var xml2: [String] = []

                for elem in xml["Root"]["Results"] {

/ 以下行给出了错误。当我提出请求时,它只有一个&#34; URL&#34;元素,但是只要我在这个例子中有很多喜欢,我的应用程序崩溃了 /

xml2.append(ELEM [&#34; URL&#34]。!元件.attributes [&#34;名称&#34;]!)                     }                     打印(XML2)         }         }

    override func willActivate() {
        super.willActivate()
    }

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
    }

    override func didDeactivate() {
        super.didDeactivate()
    }

}

任何人都可以帮助我吗?我在这个问题上经常使用谷歌,但我没有找到任何解决方案。特别是因为我对Swift来说真的很新......

致以最诚挚的问候,

hallleron

(对不起您可能会发现的语法错误,英语不是我的母语。)

1 个答案:

答案 0 :(得分:1)

我认为你真正想做的是循环遍历Url元素,如下所示:

for elem in xml["Root"]["Results"]["Url"].all {
    let urlValue = elem.element!.attributes["Name"]!;
}

你正在循环结果元素,但听起来总会有其中一个。

希望这有帮助。