组件:XML解析器
XML解析器组件是一个不可视组件,用于解析和处理 XML 格式的文档数据。它可以将 XML 字符串解析为 DOM 文档对象,并提供了查询元素、获取文本、获取属性、遍历子元素和父元素等一系列操作。适用于数据解析、配置文件处理、API 响应解析、RSS 订阅等需要处理 XML 数据的场景。
典型使用场景:
- 解析 REST API 返回的 XML 数据(如旧版 Web 服务)
- 读取 XML 配置文件(如项目配置、系统设置)
- 处理 RSS/Atom 订阅源
- 解析 SVG 或 XHTML 等 XML 格式文档
- 数据格式转换(XML → JSON)
快速索引
| 你想知道什么 | 直接看这里 |
|---|---|
| 如何解析 XML 字符串 | 解析(XML字符串) |
| 如何获取单个元素 | 取元素(选择器) |
| 如何获取元素列表 | 取元素列表(选择器) |
| 如何获取元素的文本内容 | 取文本(元素) |
| 如何获取元素的属性值 | 取属性(元素, 属性名) |
| 如何获取所有子元素 | 取子元素(元素) |
| 如何获取父元素 | 取父元素(元素) |
基础示例
最简单的使用流程:解析 XML → 取元素 → 读取属性和文本。
变量 解析器 = 创建 XML解析器()
' 1. 准备 XML 数据
变量 xml字符串 = "<book id='1001'><title>轻语言编程</title><author>VcnStudio</author><price>59.9</price></book>"
' 2. 解析 XML,返回 DOM 文档对象
变量 文档 = 解析器.解析(xml字符串)
' 3. 获取根元素
变量 根元素 = 解析器.取元素("book")
' 4. 读取属性
变量 id = 解析器.取属性(根元素, "id")
调试输出("图书ID:" + id) ' 输出:图书ID:1001
' 5. 读取子元素文本
变量 标题元素 = 解析器.取元素("title") ' 在根元素下查找
变量 标题 = 解析器.取文本(标题元素)
调试输出("书名:" + 标题) ' 输出:书名:轻语言编程
' 6. 也可以直接使用 XPath 或选择器(具体取决于实现)
综合示例:解析 RSS 订阅源
本示例模拟解析一个 RSS 2.0 格式的 XML 数据,提取文章列表(标题、链接、描述)。
变量 解析器 = 创建 XML解析器()
' ========== RSS XML 数据(模拟) ==========
变量 rssXML = "
<rss version='2.0'>
<channel>
<title>技术博客</title>
<link>https://blog.example.com</link>
<description>分享编程技术</description>
<item>
<title>轻语言入门指南</title>
<link>https://blog.example.com/guide</link>
<description>快速上手轻语言</description>
<pubDate>2026-08-27</pubDate>
</item>
<item>
<title>WebSocket 实战</title>
<link>https://blog.example.com/ws</link>
<description>构建实时应用</description>
<pubDate>2026-08-26</pubDate>
</item>
</channel>
</rss>
"
' ========== 解析文档 ==========
变量 文档
尝试
文档 = 解析器.解析(rssXML)
捕获 异常
调试输出("XML 格式错误:" + 异常.message)
返回
结束 尝试
' ========== 获取 channel ==========
变量 频道 = 解析器.取元素("channel")
如果(频道 == 空)
调试输出("未找到 channel 节点")
返回
结束 如果
' 读取频道基本信息
变量 频道标题 = 解析器.取文本(解析器.取元素("title"))
变量 频道描述 = 解析器.取文本(解析器.取元素("description"))
调试输出("频道:" + 频道标题 + " - " + 频道描述)
' ========== 获取所有 item 元素 ==========
变量 所有Item = 解析器.取元素列表("item")
变量 文章数量 = 取数组成员数(所有Item)
调试输出("共 " + 文章数量 + " 篇文章")
' ========== 遍历每个 item ==========
变量循环(i = 0, 文章数量, 1)
变量 item = 所有Item[i]
' 获取子元素(注意:取元素是在全局或当前上下文中,可能需要结合父元素)
' 假设取元素可传入上下文,此处若只支持全局,则需改用取子元素
' 这里演示使用取子元素来获取 item 下的子节点
变量 子元素列表 = 解析器.取子元素(item)
变量 标题 = ""
变量 链接 = ""
变量 描述 = ""
变量循环(j = 0, 取数组成员数(子元素列表), 1)
变量 子节点 = 子元素列表[j]
变量 节点名 = 子节点.nodeName ' 原生属性,可改为取节点名称方法
如果(节点名 == "title")
标题 = 解析器.取文本(子节点)
否则 如果(节点名 == "link")
链接 = 解析器.取文本(子节点)
否则 如果(节点名 == "description")
描述 = 解析器.取文本(子节点)
结束 如果
结束循环
调试输出("文章 " + (i+1) + ":" + 标题 + "(" + 链接 + ")")
调试输出(" 摘要:" + 描述)
结束循环
💡 提示:实际使用中,
取元素和取元素列表是否支持 XPath 或 CSS 选择器,请参考具体 API 文档。如果只支持标签名,则需结合取子元素进行遍历。
函数详解
解析(XML字符串)
- 功能: 解析 XML 格式的字符串,返回一个 DOM 文档对象,供后续操作使用。若 XML 格式错误,会抛出异常(建议用
尝试...捕获包裹)。 - 参数:
XML字符串(文本型),符合 XML 规范的字符串。 - 返回值: DOM 文档对象(可进一步调用其他函数)。
- 示例:
变量 文档 = 解析器.解析("<root><child>内容</child></root>")
取元素(选择器)
- 功能: 根据选择器(如标签名或 XPath)获取匹配的第一个元素节点。
- 参数:
选择器(文本型),具体语法取决于实现(常见为标签名或 XPath)。 - 返回值: 元素节点对象,若未找到则返回
空。 - 示例:
变量 元素 = 解析器.取元素("book")
取元素列表(选择器)
- 功能: 根据选择器获取所有匹配的元素节点,返回一个数组。
- 参数:
选择器(文本型)。 - 返回值: 数组,每个元素为一个节点对象,若未找到则返回空数组
[]。 - 示例:
变量 列表 = 解析器.取元素列表("item")
取文本(元素)
- 功能: 获取指定元素节点的文本内容(不包含子元素标签,仅文本值)。
- 参数:
元素(节点对象),由取元素或取子元素等返回。 - 返回值: 文本型,元素的文本内容。
- 示例:
变量 内容 = 解析器.取文本(元素)
取属性(元素, 属性名)
- 功能: 获取指定元素的指定属性值。
- 参数:
元素(节点对象)属性名(文本型),属性名称。
- 返回值: 文本型,属性值;若属性不存在则返回空字符串
""。 - 示例:
变量 id = 解析器.取属性(元素, "id")
取子元素(元素)
- 功能: 获取指定元素的所有直接子元素节点(不包含文本节点和注释等)。
- 参数:
元素(节点对象)。 - 返回值: 数组,子元素节点列表。
- 示例:
变量 子节点 = 解析器.取子元素(根元素)
取父元素(元素)
- 功能: 获取指定元素的父元素节点。
- 参数:
元素(节点对象)。 - 返回值: 节点对象,父元素;若为根节点则返回
空。 - 示例:
变量 父 = 解析器.取父元素(子元素)
⚠️ 注意事项
- 异常处理:
解析()在遇到格式错误的 XML 时会抛出异常,建议使用尝试...捕获包裹,避免应用崩溃。 - 选择器支持范围:
取元素和取元素列表的选择器语法取决于底层实现(可能是 XPath 或 CSS 选择器)。建议参考实际 SDK 说明,本文档仅作示意。 - 节点类型:
取子元素仅返回元素节点(Element),不包含文本节点或注释,便于遍历。 - 文本内容提取:
取文本会返回元素内所有子文本节点合并后的结果,例如<p>Hello <b>World</b></p>会返回"Hello World"。 - 命名空间:如果 XML 使用了命名空间(
xmlns),选择器可能需要指定命名空间前缀,具体支持情况请查证。 - 空值处理:所有返回节点或数组的函数,若未找到都会返回空(
空或[]),应做判空处理。 - 性能考虑:对于超大 XML 文件,解析可能消耗较多内存,建议在后台任务中处理(可配合
后台任务组件)。 - 与 JSON 对比:XML 解析比 JSON 更复杂,若非必要,推荐优先使用 JSON 数据格式。
相关文档
- 文档
不可视类型组件_后台任务—— 在后台线程中执行耗时解析 - 文档
前端(JavaScript)函数_数据操作类——解析XML文本等前端函数 - 文档
轻语言网站:轻语言语法速查—— 异常处理(尝试...捕获)语法 - 文档
服务端(PHP)函数—— 后端 PHP 的 XML 处理函数