Swift解析XML文件:如何提取姓名、CID及电话号码?
Swift XML解析实现方案
1. 定义数据模型
先创建一个结构体来存储提取的字段,方便后续统一访问:
struct Legislator { let cid: String let firstlast: String let lastname: String let phone: String }
2. 实现完整解析逻辑
在你的解析类中添加存储结果的数组,然后实现XMLParserDelegate核心方法:
// 存储解析后的所有议员数据 var legislators: [Legislator] = [] func parseData() { guard let xmlFileURL = Bundle.main.url(forResource: "data", withExtension: "xml"), let xmlResponseData = try? Data(contentsOf: xmlFileURL) else { print("无法读取XML文件") return } let parser = XMLParser(data: xmlResponseData) parser.delegate = self parser.parse() } // MARK: - XMLParserDelegate extension YourClassName: XMLParserDelegate { func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { // 只处理<legislator>标签 guard elementName == "legislator" else { return } // 从属性字典中提取目标字段 guard let cid = attributeDict["cid"], let firstlast = attributeDict["firstlast"], let lastname = attributeDict["lastname"], let phone = attributeDict["phone"] else { print("当前条目字段缺失,跳过") return } // 生成模型并加入数组 let legislator = Legislator(cid: cid, firstlast: firstlast, lastname: lastname, phone: phone) legislators.append(legislator) } func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { print("XML解析出错: \(parseError.localizedDescription)") } func parserDidEndDocument(_ parser: XMLParser) { // 解析完成后可在此处理数据,比如打印验证 print("解析完成,共获取\(legislators.count)条数据") for item in legislators { print("CID: \(item.cid) | 全名: \(item.firstlast)") } } }
关键说明
- 由于你的XML中
<legislator>是自闭合标签,只需在didStartElement方法中处理它的属性字典即可,无需处理元素内容。 - 代码中
YourClassName需要替换为你实际的类名(比如ViewController或专门的解析类)。 - 文件读取部分做了安全校验,避免文件不存在或读取失败导致崩溃。
内容的提问来源于stack exchange,提问作者Python12492
相关产品推荐
相关产品推荐

