【发布时间】:2018-12-30 16:13:41
【问题描述】:
我正在尝试使用 Swift 解析 xml 文件。我创建了一个 XMLParserDelegate 类,OSM,它实现了以下功能:
func parserDidStartDocument(_ parser: XMLParser)
func parserDidEndDocument(_ parser: XMLParser)
func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:])
func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?)
我使用委托如下:
let url = URL(string: "file:///Users/<Username>/Documents/Maps/OSMFiles/simple.osm")!
print(url.absoluteString)
let parser = XMLParser(contentsOf: url)!
let osm = OSM()
parser.delegate = osm
print(parser.parse())
print(parser.parserError)
代码打印如下:
file:///Users/<Username>/Documents/Maps/OSMFiles/simple.osm
false
nil
【问题讨论】:
-
但是
nil表示没有错误?你是在调试器中运行的吗? -
@JoakimDanielson 看起来是这样,但解析器返回 false,因此它以某种方式失败。我在调试器中运行,没有异常。
-
您可以在委托协议中实现一些错误处理方法(我认为您需要),这样您就可以了解哪里出了问题。请注意,在“...操作异常终止...”之后 parseError 有一个值,这可能是一个较软的错误,例如某种验证错误。
-
@JoakimDanielson 谢谢你,我已经实现了
parseErrorOccurred和validationErrorOccurred函数,但都没有被调用,还有其他函数可以提供更多信息吗?