<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的属性名称所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)