我是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
(对不起您可能会发现的语法错误,英语不是我的母语。)
答案 0 :(得分:1)
我认为你真正想做的是循环遍历Url元素,如下所示:
for elem in xml["Root"]["Results"]["Url"].all {
let urlValue = elem.element!.attributes["Name"]!;
}
你正在循环结果元素,但听起来总会有其中一个。
希望这有帮助。