如何更有效地使用SWXMLHash以及如何设置将正确接收数据的类?
我正在构build一个火车时刻表应用程序的项目,我正在使用一个返回XML文件的API来操纵我使用名为SWXMLHash的库的数据。
我需要提取目的地和出发时间的出发站的名称。
我创build了一个类来存储所有这些数据,但是我需要改进它,因为我无法提取目的地和出发时间。
我能够遍历XML文件,并获得出发站的名称。
这是我的class级:
class Station { var name : String var destinations:[(dest:String, times:[Int])] init(withName name: String, destinations:[(dest:String, times:[Int])]){ self.name = name self.destinations = destinations } }
这是我的代码提取站的名称:
// This code loops over the XML file and retrieves the name of the departure stations // create an empty array of Station class var stationsTest = [Station]() // retrieve the name of the departure stations and add them to and array of Station for elem in xml["root"]["station"].all{ var stations = elem["name"].element!.text! var stationPlaceHolder = Station(withName: stations, destinations: [(dest:"",times:[1])]) stationsTest.append(stationPlaceHolder) }
我的问题是我怎样才能得到每个车站的目的地与他们适当的出发时间
我想这个问题是我实现我的课程的方式,我需要find一个更好的解决scheme。
以下是我正在使用的XML文件的示例:
<?xml version="1.0" encoding="utf-8"?><root><uri><! [CDATA[http://api.bart.gov/api/etd.aspx? cmd=etd&orig=ALL&ramdom=1454366707766]]></uri><date>02/01/2016</date> <time>02:44:52 PM PST</time> <station> <name>Lake Merritt</name> <abbr>LAKE</abbr> <etd> <destination>Daly City</destination> <abbreviation>DALY</abbreviation> <estimate> <minutes>3</minutes> </estimate> <estimate> <minutes>10</minutes> </estimate> <estimate> <minutes>17</minutes> </estimate> </etd> <etd> <destination>Dublin/Pleasanton</destination> <estimate> <minutes>7</minutes> </estimate> <estimate> <minutes>22</minutes> </estimate> <estimate> <minutes>37</minutes> </estimate> </etd> <etd> <destination>Fremont</destination> <estimate> <minutes>4</minutes> </estimate> <estimate> <minutes>14</minutes> </estimate> <estimate> <minutes>19</minutes> </estimate> </etd> <etd> <destination>Richmond</destination> <estimate> <minutes>5</minutes> </estimate> <estimate> <minutes>19</minutes> </estimate> <estimate> <minutes>34</minutes> </estimate> </etd> </station> <station> <name>Fruitvale</name> <etd> <destination>Daly City</destination> <estimate> <minutes>6</minutes> </estimate> <estimate> <minutes>12</minutes> </estimate> <estimate> <minutes>22</minutes> </estimate> </etd> <etd> <destination>Dublin/Pleasanton</destination> <estimate> <minutes>10</minutes> </estimate> <estimate> <minutes>25</minutes> </estimate> <estimate> <minutes>40</minutes> </estimate> </etd>
我在SWXMLHash游乐场中使用了下面的代码,它在我的机器上工作:
// you need to model the ETD element as that has the destination and etd elements class Etd { var destination: String = "" var estimates = [String]() init(destination: String, estimates: [String]) { self.destination = destination self.estimates = estimates } } // each station has a collection of ETDs (per the XML) class Station { var name : String var etds = [Etd]() init(withName name: String, etds: [XMLIndexer]){ self.name = name for etd in etds { self.etds.append(Etd( destination: etd["destination"].element!.text!, estimates: etd["estimate"].all.map { $0["minutes"].element!.text! }) ) } } } var stationsTest = [Station]() for elem in xml["root"]["station"] { var stations = elem["name"].element!.text! var stationPlaceHolder = Station(withName: stations, etds: elem["etd"].all) stationsTest.append(stationPlaceHolder) }
基本上,你看起来像缺less的是Etd
类的抽象 – 一个站不包含目的地列表,而是Etd列表。 然后每个Etd
都有分钟的目的地和估计值。