在Swift中解析XML自闭合标签及结构体设计咨询
解决方案
你的代码核心问题在于book_type节点可以包含多个类型标签,但当前用单个BookType枚举值来存储,没法体现“多个”的情况。正确的做法是用数组来存储这些类型,同时给枚举添加原始值来对应XML里的标签名,方便解析。
修正后的Swift代码
struct Book { var title: String? var author: String? var bookTypes: [BookType]? // 改为数组,可选(对应无book_type的情况) } enum BookType: String { case fiction = "FICT" case nonfiction = "NONFICT" case reference = "REF" case autobiography = "AUTOBIO" }
解析逻辑说明
- 解析XML的
Book节点时,若存在book_type子节点,遍历它的所有子元素(比如<FICT/>、<REF/>)。 - 每个子元素的标签名(如"FICT")对应
BookType的rawValue,通过BookType(rawValue: 标签名)将其转换为枚举值,加入bookTypes数组。 - 若没有
book_type节点,bookTypes保持nil即可。
这样既符合XML的结构(支持多个类型标签),也能正确处理“无book_type”的场景。
内容的提问来源于stack exchange,提问作者RRR
相关产品推荐
相关产品推荐

