讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

Swift怎么解析XML数据 XMLParserDelegate详解

千辰姑娘_9927

千辰姑娘_9927

发布时间:2026-01-09 04:45:19

|

555人浏览过

|

来源于php中文网

原创

Swift解析XML主要用XMLParser配合Delegate,基于事件驱动、低内存;支持从URL、Data初始化,需实现didStartElement、foundCharacters、didEndElement三个回调,注意状态管理、空格处理及错误捕获。

swift怎么解析xml数据 xmlparserdelegate详解

Swift 解析 XML 主要用 XMLParser(iOS 8+ 替代了旧版 NSXMLParser)配合 XMLParserDelegate 协议实现。它基于事件驱动、内存占用低,适合解析中等规模的 XML,但不构建完整 DOM 树,需自己管理状态和数据结构。

XMLParser 初始化方式

支持三种常见初始化方式,按使用场景选择:

  • 从本地文件 URL 初始化:适用于 bundle 内的 .xml 文件
    let url = Bundle.main.url(forResource: "data", withExtension: "xml")!
    let parser = XMLParser(contentsOf: url)
  • 从 Data 初始化:适合网络请求返回的 XML 数据或字符串转 Data
    let data = xmlString.data(using: .utf8)!
    let parser = XMLParser(data: data)
  • 从网络 URL 直接初始化(注意:iOS 15+ 已弃用,建议用 URLSession 先下载再解析)
    if let parser = XMLParser(contentsOf: remoteURL) { ... }(仅限 HTTP/HTTPS 且无认证等限制场景)

关键 Delegate 方法作用与写法要点

必须实现 XMLParserDelegate,核心是三个回调方法,顺序固定:开始标签 → 内容字符 → 结束标签。别漏掉状态清理和空格处理。

Oc Gateway Guardian
Oc Gateway Guardian

通过预检、监控诊断和证据捕获,防止长时间运行的 OpenClaw 网关不安全重启。

下载
  • didStartElement:进入节点时触发,获取节点名、命名空间、属性字典
    常用操作:记录当前节点名(如 currentElement = elementName),检查是否为目标节点(如 if elementName == "user"),提取属性(attributes["id"])
  • foundCharacters:读取到文本内容时触发(可能被多次调用!)
    务必用 string.trimmingCharacters(in: .whitespacesAndNewlines) 去除换行/空格;建议累积到临时变量(如 currentValue += string),不要直接 print 或赋值
  • didEndElement:节点闭合时触发,此时 currentValue 是该节点完整文本
    根据 elementName 判断是否要保存数据(如 if elementName == "name" { user.name = currentValue }),之后清空 currentValue

处理同名子节点和嵌套结构

XML 中常有多个 <item></item> 或嵌套如 <address><city>Beijing</city></address>,靠状态机管理:

  • 用栈或层级计数跟踪嵌套深度(例如进入 address 时设 inAddress = true,退出时重置)
  • 遇到同名节点(如多个 <person></person>)时,在 didStartElement 中新建模型对象,在 didEndElement 遇到父节点(如 persons)再追加进数组
  • 避免在 foundCharacters 里直接存值——因为父子节点文本会连续触发,必须结合当前 currentElement 判断归属

错误处理与调试技巧

解析失败很常见,不能只看 parse() 返回值,要主动监听错误和生命周期:

  • 实现 parser(_:, parseErrorOccurred:) 捕获具体错误(如编码不对、标签未闭合)
  • 加上 parserDidStartDocument 和 parserDidEndDocument 打印日志,确认是否真正走完全流程
  • 调试时先用简单 XML(如单层几个标签)验证逻辑,再逐步加嵌套和属性
  • 注意:XML 必须是 UTF-8 编码;含中文时确保文件保存为 UTF-8 无 BOM,否则 foundCharacters 可能为空

基本上就这些。不用第三方库也能稳稳解析,关键是理清“事件流 + 状态变量”的配合逻辑。

热门AI工具

更多
码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

857

2026.03.03

Swift编程与iOS/macOS应用开发教程合集
Swift编程与iOS/macOS应用开发教程合集

面向苹果生态开发者,系统讲解 Swift 语言核心与 iOS/macOS 应用开发,涵盖 Swift 语法基础、Xcode 开发环境搭建与项目管理、SwiftUI 声明式 UI 开发、UIKit 与 SwiftUI 混合开发策略、Combine 响应式编程框架、数据持久化(SwiftData/Core Data/UserDefaults)、网络请求与 JSON 解析、App 签名/打包/TestFlight 测试与 App Store

1762

2026.06.03

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3500

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7579

2023.08.02

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5184

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6737

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2642

2024.11.28

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

100

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM Programmer’s Manual
LLVM Programmer’s Manual

共0课时 | 0人学习

Conan 包创建教程
Conan 包创建教程

共0课时 | 0人学习

Visual Studio 入门指南
Visual Studio 入门指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn