在 swift 中解析 XML 失败并出现 nil 错误

Posted

技术标签:

【中文标题】在 swift 中解析 XML 失败并出现 nil 错误【英文标题】:Parsing XML in swift fails with nil error 【发布时间】: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 谢谢你,我已经实现了parseErrorOccurredvalidationErrorOccurred 函数,但都没有被调用,还有其他函数可以提供更多信息吗? 【参考方案1】:

事实证明,应用沙盒是问题所在,可能是因为我试图访问沙盒外的文件。关闭沙盒可以解决问题。

【讨论】:

以上是关于在 swift 中解析 XML 失败并出现 nil 错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在运行时在非可选中检测到意外的 nil 值:强制转换为可选失败

使用 swift 从解析的 Json 中提取数据

解析 PFUser.currentUser 返回 nil - Swift

ios SWIFT 在展开选项值时发现 nil。

XML解析失败:格式不符

解析 / Swift 问题与 tableviewcell“二元运算符'=='不能应用于单元格和 nil 类型的操作数”