Я пытаюсь проанализировать файл GPX (геолокации) как файл XML, используя XMLParser.Я также пытаюсь обернуть некоторые функции, чтобы упростить его.
Я застрял, пытаясь запустить мой код с ошибкой в моем парсере и "NIL" в debugDescription для parserError ... ЛюбойИдея, что здесь происходит?
Вот код:
import Foundation
class Wpt {
var lat: Float?;
var long: Float?;
var name = "";
var time = "";
}
var gpx = [Wpt]();
var wpt = Wpt();
var foundCharacters = "";
class Parser: NSObject, XMLParserDelegate {
func test(filepath: URL) {
let parser = XMLParser(contentsOf: filepath)!
parser.delegate = self
let success = parser.parse()
if success {
print("done")
}
else {
print(parser.parserError.debugDescription)
}
}
func parser(_ parser: XMLParser,
didStartElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?,
attributes attributeDict: [String : String] = [:]) {
if elementName == "wpt" {
if let lat = attributeDict["lat"] {
wpt.lat = Float(lat);
}
if let long = attributeDict["long"] {
wpt.long = Float(long);
}
}
}
func parser(_ parser: XMLParser,
foundCharacters string: String) {
foundCharacters += string;
}
func parser(_ parser: XMLParser,
didEndElement elementName: String,
namespaceURI: String?,
qualifiedName qName: String?) {
if elementName == "name" {
wpt.name = foundCharacters;
}
if elementName == "time" {
wpt.time = foundCharacters;
}
if elementName == "wpt" {
gpx.append(wpt);
}
foundCharacters = "";
}
func parserDidEndDocument(_ parser: XMLParser) {
for wpx in gpx {
print("\(wpx.name)\n\(wpx.time)");
print("\n")
}
}
}
var filepath = URL(fileURLWithPath: "/Document/Github/GPXParser/GPXParser/Location.gpx")
Parser().test(filepath: filepath)
А вот файл GPX:
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="37.331705" lon="-122.030237">
<name>Cupertino</name>
<time>2014-09-24T14:55:37Z</time>
</wpt>
<wpt lat="37.331285" lon="-122.039837">
<name>Paris</name>
<time>2014-09-24T14:58:37Z</time>
</wpt>
</gpx>
Если вы предпочитаете ссылку на проектна моем GitHub
Не стесняйтесь критиковать, первый проект Swift для меня:)