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

Swift 4 iOS:如何将XML字符串解析为单独字符串变量

在Swift 4中从字符串XML提取指定字段的方法

针对你的需求,我整理了两种在Swift 4里从字符串格式XML提取name、role等值的实用方法,一起来看看:

首先要做的第一步是清理XML字符串里的转义字符——你的MyResult输出里带有\"转义符号,这会影响解析,所以先处理:

// 清理XML字符串中的转义反斜杠
let cleanedXML = MyResult.replacingOccurrences(of: "\\", with: "")

方法一:使用原生XMLParser(灵活适配各种XML结构)

XMLParser是Foundation框架自带的解析器,适合处理大型XML或者需要逐节点自定义处理的场景。我们可以通过实现XMLParserDelegate来跟踪解析过程,提取目标字段:

1. 定义解析助手类

class XMLParserHelper: NSObject, XMLParserDelegate {
    // 记录当前正在解析的节点名称
    private var currentElement = ""
    // 存储提取到的字段值
    var extractedName: String?
    var extractedRole: String?
    
    // 开始解析某个节点时触发
    func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) {
        currentElement = elementName
    }
    
    // 读取节点内的文本内容时触发
    func parser(_ parser: XMLParser, foundCharacters string: String) {
        // 去除文本中的空格和换行符
        let trimmedText = string.trimmingCharacters(in: .whitespacesAndNewlines)
        guard !trimmedText.isEmpty else { return }
        
        // 根据当前节点名称赋值
        switch currentElement {
        case "name":
            extractedName = trimmedText
        case "role":
            extractedRole = trimmedText
        default:
            break
        }
    }
}

2. 执行解析并提取值

// 将清理后的XML字符串转为Data格式
guard let xmlData = cleanedXML.data(using: .utf8) else {
    print("无法将XML字符串转换为Data格式")
    return
}

// 初始化解析器和助手类
let parser = XMLParser(data: xmlData)
let parserHelper = XMLParserHelper()
parser.delegate = parserHelper

// 开始解析
if parser.parse() {
    // 提取到值后赋值给你的变量
    if let name = parserHelper.extractedName {
        let nameString = name
        print("提取到name:\(nameString)")
    }
    if let role = parserHelper.extractedRole {
        let roleString = role
        print("提取到role:\(roleString)")
    }
} else {
    print("XML解析失败:\(parser.parserError?.localizedDescription ?? "未知错误")")
}

方法二:使用XMLDecoder(简洁高效,适合固定结构XML)

如果你要解析的XML结构固定,XMLDecoder(Swift 4+支持)是更简洁的选择,用法和JSONDecoder类似,通过定义对应的数据模型来自动解析:

1. 定义对应XML结构的数据模型

// 对应<userDetails>节点的模型
struct UserDetails: Codable {
    let status: String
    let name: String
    let role: String
}

// 对应XML根节点的模型(因为你的XML根节点是<userDetails>,包裹在整个文档里)
struct RootXML: Codable {
    let userDetails: UserDetails
}

2. 执行解码并提取值

guard let xmlData = cleanedXML.data(using: .utf8) else {
    print("无法将XML字符串转换为Data格式")
    return
}

let decoder = XMLDecoder()
// 如果你的XML节点命名和模型属性命名有差异,可以调整解码策略,比如下划线转驼峰
// decoder.keyDecodingStrategy = .convertFromSnakeCase

do {
    // 解码XML数据到模型
    let root = try decoder.decode(RootXML.self, from: xmlData)
    // 直接从模型中提取值并赋值
    let nameString = root.userDetails.name
    let roleString = root.userDetails.role
    print("提取到name:\(nameString),role:\(roleString)")
} catch {
    print("XML解码失败:\(error.localizedDescription)")
}

两种方法各有优势:XMLParser更灵活,适合复杂或大型XML;XMLDecoder代码更简洁,适合结构固定的场景,你可以根据自己的需求选择。

内容的提问来源于stack exchange,提问作者Ashique

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:28