如何更有效地使用 SWXMLHash 以及如何设置 class 以正确接收数据?
how to use more efficiently SWXMLHash and how to set the class that will receive the data properly?
我正在为火车时刻表应用构建一个项目,我正在使用一个 API 和 returns 一个 XML 文件来处理我正在使用的数据名为 SWXMLHash.
的库
我需要提取出发站名称及其目的地和出发时间。
我创建了一个 class 来存储所有这些数据,但我需要改进它,因为我在提取目的地和出发时间时遇到问题。
我能够遍历 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)
}
我的问题是如何获得每个车站的目的地及其适当的出发时间
我想问题出在我实现 class 的方式上,我需要找到更好的解决方案。
这是我正在使用的 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 playground 中使用了以下代码,它可以在我的机器上运行:
// 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 { [=10=]["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)
}
基本上,看起来您缺少的是 Etd
class 的抽象 - 车站不包含目的地列表,但包含 Etds 列表。然后每个 Etd
都有 个目的地 和 分钟估计。
我正在为火车时刻表应用构建一个项目,我正在使用一个 API 和 returns 一个 XML 文件来处理我正在使用的数据名为 SWXMLHash.
的库我需要提取出发站名称及其目的地和出发时间。
我创建了一个 class 来存储所有这些数据,但我需要改进它,因为我在提取目的地和出发时间时遇到问题。
我能够遍历 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)
}
我的问题是如何获得每个车站的目的地及其适当的出发时间
我想问题出在我实现 class 的方式上,我需要找到更好的解决方案。
这是我正在使用的 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 playground 中使用了以下代码,它可以在我的机器上运行:
// 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 { [=10=]["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)
}
基本上,看起来您缺少的是 Etd
class 的抽象 - 车站不包含目的地列表,但包含 Etds 列表。然后每个 Etd
都有 个目的地 和 分钟估计。