2016-10-04 80 views
-1

我正在研究Swift 3.0中的一個應用程序,該應用程序解析XML文件並通過標籤顯示一些屬性。除了當我嘗試解析包含 <link href = "..."/>標記的XML部分時,大部分工作都正常。當我嘗試這樣做時,應用程序崩潰,並且出現「致命錯誤:索引超出範圍」消息。 下面是我使用的XML:https://alerts.weather.gov/cap/fl.php?x=0 這裏是我的代碼:如何從Swift中的XML解析鏈接「href」標籤?

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { 
    if(elementName == "cap:event") { 
     titleFound = true 
    } 
    if(elementName == "cap:expires") { 
     descFound = true 
    } 
    if(elementName == "cap:severity") { 
     sevFound = true 
    } 
    if(elementName == "summary") { 
     summFound = true 
    } 
    if(elementName == "cap:effective") { 
     effFound = true 
    } 
    if(elementName == "cap:urgency") { 
     urgFound = true 
    } 
    if(elementName == "cap:certainty") { 
     certFound = true 
    } 
    if(elementName == "link") { 
     linkFound = true 
    } 
} 

func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    if(elementName == "cap:event") { 
     titleFound = false 
    } 
    if(elementName == "cap:expires") { 
     descFound = false 
    } 
    if(elementName == "cap:severity") { 
     sevFound = false 
    } 
    if(elementName == "summary") { 
     summFound = false 
    } 
    if(elementName == "cap:effective") { 
     effFound = false 
    } 
    if(elementName == "cap:urgency") { 
     urgFound = false 
    } 
    if(elementName == "cap:certainty") { 
     certFound = false 
    } 
    if(elementName == "link") { 
     linkFound = false 
    } 
} 

我想要的元素是從<entry>標籤內的鏈接href標記。我不知道如何正確解析這部分,因爲它沒有像其他標籤格式化(<cap:event>,<cap:severity>等)誰能闡明這一點?

回答

0

在你didStartElement方法,您可以訪問通過參數attributeDict該屬性應返回["href":"www.whatever.com"]

找到了答案here

這是對Tanksale的CS320中期?無論如何,祝你好運!

+0

哈,的確是!我想知道是否有人從這個班上找到這個問題,當尋求幫助。謝謝! –

0

這是一個解決辦法,但檢查XML文檔的ID標籤也包含網址。

我遇到了同樣的問題。啾啾!