comment utiliser plus efficacement SWXMLHash et comment définir la class qui recevra datatables correctement?

Je construis un projet pour une application de planification de train, et j'utilise une API qui returnne un file XML, pour manipuler datatables que j'utilise la bibliothèque appelée SWXMLHash.

Je dois extraire le nom de la gare de départ avec ses destinations et heures de départ.

J'ai créé une class pour stocker toutes ces données, mais je dois l'améliorer car j'ai du mal à extraire les destinations et les heures de départ.

J'ai été capable de faire une boucle sur le file XML et d'get les noms des stations de départ.

Voici ma class:

class Station { var name : Ssortingng var destinations:[(dest:Ssortingng, times:[Int])] init(withName name: Ssortingng, destinations:[(dest:Ssortingng, times:[Int])]){ self.name = name self.destinations = destinations } } 

Voici mon code pour extraire les noms des stations:

 // This code loops over the XML file and resortingeves the name of the departure stations // create an empty array of Station class var stationsTest = [Station]() // resortingeve 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) } 

Mon problème est comment puis-je get les destinations de chaque station avec leurs heures de départ appropriées

Je suppose que le problème est dans la façon dont j'ai implémenté ma class, j'ai besoin de find une meilleure solution.

Voici un exemple du file XML avec lequel je travaille:

 <?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> 

J'ai utilisé le code ci-dessous dans le terrain de jeu SWXMLHash et cela fonctionne sur ma machine:

 // you need to model the ETD element as that has the destination and etd elements class Etd { var destination: Ssortingng = "" var estimates = [Ssortingng]() init(destination: Ssortingng, estimates: [Ssortingng]) { self.destination = destination self.estimates = estimates } } // each station has a collection of ETDs (per the XML) class Station { var name : Ssortingng var etds = [Etd]() init(withName name: Ssortingng, 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) } 

Fondamentalement, il semble que ce qui vous manquait était l'abstraction pour la class Etd – une station ne contient pas une list de destinations, mais une list de Etds. Chaque Etd alors à la fois une destination et des estimations par minute.