我如何parsing两个URL中的两个XML文件(Swift)

我有两个XMLurl。 第一个URL显示SongName上的SongName ,第二个URL显示SongPath 。 当我点击SongName上的SongName时,它会转到第二个URL中的SongPath 。 这是桌子 。 您可以在代码中看到SongNameurl。

这个XML:

 <NewDataSet> <Table> <SongName>AYA LIV LIVOKIM PEL?STANKTV</SongName> </Table> <Table> <SongName>DîLAN PPP PELISTANK</SongName> </Table> <Table> <SongName>KARIN BAL DAGRIM</SongName> </Table> <Table> <SongName>RUKEN WERE CANE</SongName> </Table> </NewDataSet> 

这是SongPath的第二个URL:

而这个XML:

 <NewDataSet> <Table> <SongPath>http://jo.sms2tv.com/PelistankApp/Songs/song1.mp3</SongPath> </Table> <Table> <SongPath>http://jo.sms2tv.com/PelistankApp/Songs/song2.mp3</SongPath> </Table> <Table> <SongPath>http://jo.sms2tv.com/PelistankApp/Songs/song3.mp3</SongPath> </Table> <Table> <SongPath>http://jo.sms2tv.com/PelistankApp/Songs/song4.mp3</SongPath> </Table> </NewDataSet> 

而这个我的Swift代码:

 class ViewController: UIViewController, NSXMLParserDelegate, UITableViewDataSource, UITableViewDelegate { @IBOutlet var tbData : UITableView? var parser = NSXMLParser() var posts = NSMutableArray() var elements = NSMutableDictionary() var element = NSString() var title1 = NSMutableString() var date = NSMutableString() override func viewDidLoad() { // Do any additional setup after loading the view, typically from a nib. super.viewDidLoad() self.beginParsing() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func beginParsing() { posts = [] parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://jo.sms2tv.com/PelistankApp/default.aspx"))!)! parser.delegate = self parser.parse() tbData?.reloadData() } //////////////////////////////////////XMLParser Methods func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { element = elementName if (elementName as NSString).isEqualToString("Table") { elements = NSMutableDictionary() elements = [:] title1 = NSMutableString() title1 = "" date = NSMutableString() date = "" } } func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if (elementName as NSString).isEqualToString("Table") { if !title1.isEqual(nil) { elements.setObject(title1, forKey: "title") } if !date.isEqual(nil) { elements.setObject(date, forKey: "date") } posts.addObject(elements) } } func parser(parser: NSXMLParser, foundCharacters string: String) { if element.isEqualToString("SongName") { title1.appendString(string) } else if element.isEqualToString("pubDate") { date.appendString(string) } } ///////////////////////////////////////////XMLParser Methods //////////////////////////////Tableview Methods func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return posts.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("Cell")! if(cell.isEqual(NSNull)) { cell = NSBundle.mainBundle().loadNibNamed("Cell", owner: self, options: nil) [0] as! UITableViewCell } cell.textLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("title") as! NSString as String cell.detailTextLabel?.text = posts.objectAtIndex(indexPath.row).valueForKey("date") as! NSString as String return cell as UITableViewCell } //////////////////////////////////////Tableview Methods /////// Table Action ( Cell clicked ) /////// func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) let row = indexPath.row print("Row: \(row)") } /////// Table Action ( Cell clicked ) /////// @IBAction func Song(sender: UIButton) { let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("ViewSong") self.presentViewController(nextViewController, animated:true, completion:nil) } @IBAction func BackTableToHome(sender: UIBarButtonItem) { let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("Home") self.presentViewController(nextViewController, animated:true, completion:nil) } //////////Button SecandViewController //// @IBAction func SecondViewController(sender: AnyObject) { let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("ViewSong") self.presentViewController(nextViewController, animated:true, completion:nil) } } 

任何build议请。 我可以使MP3播放器没有问题,我只是想要它,所以当我点击表格中的一个单元格时,它会播放第二个XML URL中同一行的歌曲。

首先parsing你的两个API并将歌曲名称和歌曲URL存储在一个数组中。 并随时访问它,不要一次又一次parsing。

这个答案是使用SWXMLHashparsing

您可以使用Alamofire发出HTTP请求

 let xml = SWXMLHash.parse(data!) for elem in xml["NewDataSet"]["Table"] { print(elem["SongName"].element?.text) //PRINT SONG NAME } 

有关XMLparsing的更多信息,我已经回答了

//这就是你想要的

  /////// Table Action ( Cell clicked ) /////// func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) let row = indexPath.row print("Row: \(row)") print(posts.objectAtIndex(indexPath.row).valueForKey("date") as! NSString as String) //Prints the song url } 

这里是项目链接https://drive.google.com/file/d/0B2csGr9uKp1DN1VodkNndmtQR2c/view?usp=sharing