IOS-GPX file parser.parse()操作无法执行’;不可能完成
考虑到我认为自己有足够的XMLParserDelegate委托方法,我很沮丧地发现为什么我下面的代码没有解析GPX文件的内容 这是输入的GPX文件IOS-GPX file parser.parse()操作无法执行’;不可能完成,ios,xml,swift,gpx,Ios,Xml,Swift,Gpx,考虑到我认为自己有足够的XMLParserDelegate委托方法,我很沮丧地发现为什么我下面的代码没有解析GPX文件的内容 这是输入的GPX文件 <?xml version="1.0"?> <gpx version="1.1" creator="Xcode"> <wpt lat="42.373734" lon="-71.178314"> <name>A's house</name> </wpt> &
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<wpt lat="42.373734" lon="-71.178314">
<name>A's house</name>
</wpt>
<wpt lat="41.094082" lon="-73.519411">
<name>B's Office</name>
</wpt>
<wpt lat="42.350816" lon="-71.065578">
<name>W Hotel</name>
</wpt>
<wpt lat="42.352291" lon="-71.045283">
<name>District Hall</name>
</wpt>
</gpx>
您的代码是否达到了对
parser.parse()
的调用?是否调用了didStartElement
delegate方法?我在每一行中都使用了单步,它实际上进入了这个调用。但是我不知道为什么不执行if部分?elementName的值是多少?您的元素
变量有什么意义?为什么不简单地比较一下elementName
?很抱歉我的代表迟到了。全局变量element
在语义上的使用并不重要。但是我使用它是因为我合并了另一个函数func parser(parser:XMLParser,foundCharacters string:string)
来使用element
。我编辑了我的问题细节,其中包括XMLParserDelegate
的后一个代表,并为parser.parse()
设置了标志。问题完全取决于为什么解析在打印出条件失败时无法启动
class AutoCheckInVC: UIViewController, UITableViewDataSource, UITableViewDelegate, CLLocationManagerDelegate, XMLParserDelegate{
.........
private var element: String?
private var locArray = [String]()
private var parser : XMLParser = XMLParser()
func beginParsing(){
guard let path = Bundle.main.path(forResource: "TestLocations", ofType: "gpx") else {
NSLog("Couldn't find the gpx file!!!")
return
}
guard let url = URL(string: path) else {
preconditionFailure("URL is nil!!!")
}
guard let parser = XMLParser(contentsOf: url) else {
preconditionFailure("XML file is nil!!!")
}
parser.delegate = self
let beParsed = parser.parse()
if beParsed {
NSLog("Start an event-driving parsing")
}
else {
preconditionFailure("Failed to start parsing")
}
}
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
element = elementName
/** The code doesn't execute inside the if part. Why???**/
if (element == "wpt") {
//create the string array from the file
let long = attributeDict["lon"]!
let lat = attributeDict["lat"]!
self.curLL = "\(lat),\(long)" as String?
debugPrint("Lon, Lat of current point is: \(String(describing: self.curLL))")
}
}
func parser(_ parser: XMLParser, foundCharacters string: String) {
let data = string.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
if (!data.isEmpty) {
if (element == "wpt"){
locArray[data] = self.curLL as String?
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
beginParsing() /*****Something wrong here!!!****/
debugPrint("LocArray: \(locArray)")
for i in 0..<venue.numOfElements() {
let venueTemp = venue.readHistory(atIndex: i)
let para1: Parameters = [
//Required: name, ll, and version date
"ll": locArray[i]
]
}