【问题标题】:NSXMLParsing broken strings into an array using SwiftNSXMLParsing 使用 Swift 将损坏的字符串转换为数组
【发布时间】:2016-02-15 09:05:45
【问题描述】:

使用 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>

【问题讨论】:

  • XML 是什么样的?
  • @GregBrown 我将它添加到我的问题中,谢谢!

标签: ios swift nsxmlparser


【解决方案1】:

问题是conditionIconString 永远不会重置,它会随着找到的每个&lt;icon-link&gt; 标记而增长。在开始解析下一个元素之前,更新 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")
}

【讨论】:

  • 谢谢!该行现在将字符串保存在一个数组中,但是它将xml字符串添加到一个循环中的数组中,例如[第一项,第一项第二项,第一项,第二项第三项等] 我需要移动我的条件Icons.append ?
  • 对不起,我不理解后续内容。您想将每个 item-link 添加到 conditionIcons 数组中吗?
  • 是的,我的代码不是将每个 item-link 添加到一个数组中,而是返回 15 个数组,每个数组都添加一个 item-link,而不是仅包含一个包含 15 个字符串的数组。说起来有点难……
  • 您是否在其他任何地方修改conditionsIcons。从您发布的代码来看,它应该可以正常工作。
  • 我在didStartElement 的问题中添加了几行,其中初始化conditionsIcons 以创建占位符。会这样吗?
【解决方案2】:

看来您需要在parser:didEndElement:namespaceURI:qualifiedName: 中重置conditionIconString。在“weAreInsideAnItem = false”行之前添加:

conditionIconString = String()

【讨论】:

    猜你喜欢
    • 2014-11-13
    • 1970-01-01
    • 2016-11-20
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2016-01-27
    相关资源
    最近更新 更多