Синтаксический анализ XML в swift: ошибка синтаксического анализатора описания - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь проанализировать файл 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 для меня:)

...