Swift的XMLParser是怎么处理错误的

admin 百科 10
XMLParser 通过 parser(_:parseErrorOccurred:) 回调报告解析错误,不主动抛异常;错误发生时自动停止解析,parse() 返回 false;需在代理中保存错误并校验关键字段,必要时调用 abortParsing()。

Swift的XMLParser是怎么处理错误的-第1张图片-佛山资讯网

Swift 的 XMLParser 本身不主动抛出错误,而是通过代理方法回调通知解析失败的位置和原因。 它属于“SAX 风格”解析器,边读边解析,不构建完整 DOM,因此错误处理是异步、事件驱动的,关键在于你实现的 XMLParserDelegate 方法是否正确响应。

parser(_:parseErrorOccurred:)

这是**唯一专门用于报告解析错误的代理方法**。只要底层 libxml2 遇到格式问题(如标签不闭合、非法字符、编码错误、嵌套过深等),系统就会调用它,并传入一个 NSError 对象。

  • 错误码通常来自 XMLParser.ParserErrorCode(比如 .invalidCharacter.mismatchedTag.documentStartTagNotClosed
  • error.userInfo[NSLocalizedDescriptionKey] 一般包含人类可读的提示,比如 “Opening and ending tag mismatch: book vs author”
  • 此时 parser 已自动停止,parser.parse() 会返回 false

parser(_:didStartElement:namespaceURI:qualifiedName:attributes:)

这个方法**不会因标签语法错误而被调用**——如果起始标签本身就不合法(比如含控制字符或未转义 &),错误会在更早阶段被捕获,并走上面的 parseErrorOccurred 回调。

但它可能暴露**逻辑层面的问题**,比如遇到未知元素名或缺失必需属性。这时你要自己检查、记录、甚至提前调用 parser.abortParsing() 主动终止。

标签: 编码 字节 red gate

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~