Swift解析给定elementName的属性名称

Swift解析给定elementName的属性名称,第1张

概述这是我网址的一部分 <cities> <country name="Абхазия"> <city id="37188" region="27028" head="" type="3" country="Абхазия" part="" resort="" climate="">Новый Афон</city> <city id="37178" region="10282" 这是我网址的一部分
<citIEs>  <country name="Абхазия">    <city ID="37188" region="27028" head="" type="3" country="Абхазия" part="" resort="" climate="">Новый Афон</city>    <city ID="37178" region="10282" head="" type="3" country="Абхазия" part="" resort="" climate="">Пицунда</city>    <city ID="37187" region="37187" head="" type="3" country="Абхазия" part="" resort="" climate="">Гудаута</city>    <city ID="37172" region="10280" head="" type="3" country="Абхазия" part="" resort="" climate="">Гагра</city>    <city ID="37189" region="10281" head="0" type="3" country="Абхазия" part="" resort="0" climate="">Сухум</city>  </country>

用户键入城市名称,例如:“Пицунда”,我想获取其ID.对于“Пицунда”,ID为“10282”.

下面我发布了我的工作代码.

var parser: NSXMLParser!var city: String = String()var ifDirOK = falsevar ifCitynameOK = falseoverrIDe func vIEwDIDLoad() {    super.vIEwDIDLoad()    let url: NSURL = NSURL(string: "https://pogoda.yandex.ru/static/citIEs.xml")!    parser = NSXMLParser(contentsOfURL: url)    parser.delegate = self    parser.parse()}overrIDe func dIDReceiveMemoryWarning() {    super.dIDReceiveMemoryWarning()    // dispose of any resources that can be recreated.}func parser(parser: NSXMLParser!,dIDStartElement elementname: String!,namespaceURI: String!,qualifIEdname qname: String!,attributes attributeDict: [NSObject : AnyObject]!) {    //let cityID = attributeDict ["ID"] as? Nsstring    if (elementname == "city"){        ifDirOK = true    }}func parser(parser: NSXMLParser!,foundCharacters string: String!) {    var data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())    if (data == city){        ifCitynameOK = true    }}func parser(parser: NSXMLParser!,foundAttributeDeclarationWithname attributename: String!,forElement elementname: String!,type: String!,defaultValue: String!) {    if (ifDirOK && ifCitynameOK){        println("\(attributename)")    }}func parser(parser: NSXMLParser!,dIDEndElement elementname: String!,qualifIEdname qname: String!) {}

毕竟,我想将ID传递给另一个URL文件(export.yandex.ru/weather-ng/forecasts/{ID of the city} .xml)并解析它.我是否需要创建另一个Swift类并以某种方式将其与第一个连接?

建立[city:ID]字典可以为您提供解决方案.
我已经基于关于NSXMLParser生命周期的文章在 http://www.codeproject.com/Articles/248883/Objective-C-Fundamentals-NSXMLParser实现了一个简单的解决方案.

当元素启动时调用以下方法.
您可以检索city ID属性并将其保存在实例级变量中,以便您可以在下一个方法中使用它.

func parser(parser: NSXMLParser,dIDStartElement elementname: String,namespaceURI: String?,qualifIEdname qname: String?,attributes attributeDict: [NSObject : AnyObject])

然后,当解析器在开始和结束之间看到任何内容时调用Following方法.

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

所以,你可以从这里获得城市名称.
现在我们有城市ID和城市名称,以便在[city:ID]字典中添加新项目.

一旦你构建了字典,搜索就会非常简单.

这是我的工作测试代码.

class VIEwController: UIVIEwController,NSXMLParserDelegate{    var parser: NSXMLParser!    var city: String = String()    var ifDirOK = false    var ifCitynameOK = false     var element : String?    var value: String=String()    var dic = Dictionary<String,String>()    var currentCityID:String?    @IBOutlet weak var result: UILabel!    @IBOutlet weak var search: UITextFIEld! //search text    @IBAction func ActionGoGetIt(sender: AnyObject) {        self.result.text=dic[self.search.text]    }    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        let url: NSURL = NSURL(string: "https://pogoda.yandex.ru/static/citIEs.xml")!        parser = NSXMLParser(contentsOfURL: url)        parser.delegate = self        parser.parse()    }    overrIDe func dIDReceiveMemoryWarning() {        super.dIDReceiveMemoryWarning()        // dispose of any resources that can be recreated.    }    func parser(parser: NSXMLParser,attributes attributeDict: [NSObject : AnyObject]) {        element = elementname        if (element == "city"){            ifDirOK = true            let cityID = attributeDict ["ID"] as? Nsstring            self.currentCityID = cityID  as? String        }    }    func parser(parser: NSXMLParser!,foundCharacters string: String!) {        var data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())        if (!data.isEmpty){             if (element == "city"){                    dic[data] = self.currentCityID as String?            }        }    }    func parser(parser: NSXMLParser,foundAttributeDeclarationWithname attributename: String,forElement elementname: String,type: String?,defaultValue: String?) {        if (ifDirOK && ifCitynameOK){            println("\(attributename)")        }    }    func parser(parser: NSXMLParser,dIDEndElement elementname: String,qualifIEdname qname: String?) {    }}
总结

以上是内存溢出为你收集整理的Swift解析给定elementName的属性名称全部内容,希望文章能够帮你解决Swift解析给定elementName的属性名称所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存