You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:26:13