NSXML使用Swift将破碎的字符串分解为数组

时间:2015-11-13 17:31:14

标签: ios swift nsxmlparser

使用NSXMLParser,在下面的代码conditionIconString = conditionIconString + string中将链接存储为1个大字符串,但我需要它将每个链接存储为[String]中的字符串。我弄不清楚该怎么办?

var conditionsIcons = [String]()
var conditionIconString = String()
var weAreInsideAnItem = false

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {


            if (elementName as NSString).isEqualToString("icon-link") {
                weAreInsideAnItem = true

            }


        if (elementName as NSString).isEqualToString("conditions-icon") {
            conditionsIcons = [String]()
            conditionsIcons = [""]
        }

 func parser(parser: NSXMLParser, foundCharacters string: String) {


        if weAreInsideAnItem == true {
             if element.isEqualToString("icon-link") {
                    conditionIconString = conditionIconString + string
            }
        }
}

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
       if (elementName as NSString).isEqualToString("icon-link") {
            conditionsIcons.append(conditionIconString)
            weAreInsideAnItem = false
       }
        elements.setObject(conditionsIcons, forKey: "conditionIcons")
}

这是XML我正在解析:http://forecast.weather.gov/MapClick.php?lat=39.557&lon=-79.3542&unit=0&lg=english&FcstType=dwml

<conditions-icon type="forecast-NWS" time-layout="k-p12h-n13-1">
<name>Conditions Icon</name>
<icon-link>
http://forecast.weather.gov/newimages/medium/wind_sct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/DualImage.php?i=nra_sn&j=nsn&ip=20&jp=40
</icon-link>
<icon-link>
http://forecast.weather.gov/DualImage.php?i=sn&j=bkn&ip=20
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/nsct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/sct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/nsct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/sct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/nsct.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/bkn.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/nbkn.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/bkn.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/nshra40.png
</icon-link>
<icon-link>
http://forecast.weather.gov/newimages/medium/bkn.png
</icon-link>
</conditions-icon>

2 个答案:

答案 0 :(得分:2)

问题是conditionIconString永远不会重置,它会随着找到的每个<icon-link>标记而增长。在开始解析下一个元素之前,更新didEndElement函数以将此字符串设置为空:

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if (elementName as NSString).isEqualToString("icon-link") {
        conditionsIcons.append(conditionIconString)

        conditionIconString = String() // THIS IS THE KEY LINE

        weAreInsideAnItem = false
    }
    elements.setObject(conditionsIcons, forKey: "conditionIcons")
}

答案 1 :(得分:2)

您似乎需要重置conditionIconString中的parser:didEndElement:namespaceURI:qualifiedName:。在显示“weAreInsideAnItem = false”的行之前添加:

conditionIconString = String()