组件: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")

取子元素(元素)

  • 功能: 获取指定元素的所有直接子元素节点(不包含文本节点和注释等)。
  • 参数: 元素(节点对象)。
  • 返回值: 数组,子元素节点列表。
  • 示例: 变量 子节点 = 解析器.取子元素(根元素)

取父元素(元素)

  • 功能: 获取指定元素的父元素节点。
  • 参数: 元素(节点对象)。
  • 返回值: 节点对象,父元素;若为根节点则返回
  • 示例: 变量 父 = 解析器.取父元素(子元素)

⚠️ 注意事项

  1. 异常处理解析() 在遇到格式错误的 XML 时会抛出异常,建议使用 尝试...捕获 包裹,避免应用崩溃。
  2. 选择器支持范围取元素取元素列表 的选择器语法取决于底层实现(可能是 XPath 或 CSS 选择器)。建议参考实际 SDK 说明,本文档仅作示意。
  3. 节点类型取子元素 仅返回元素节点(Element),不包含文本节点或注释,便于遍历。
  4. 文本内容提取取文本 会返回元素内所有子文本节点合并后的结果,例如 <p>Hello <b>World</b></p> 会返回 "Hello World"
  5. 命名空间:如果 XML 使用了命名空间(xmlns),选择器可能需要指定命名空间前缀,具体支持情况请查证。
  6. 空值处理:所有返回节点或数组的函数,若未找到都会返回空([]),应做判空处理。
  7. 性能考虑:对于超大 XML 文件,解析可能消耗较多内存,建议在后台任务中处理(可配合 后台任务 组件)。
  8. 与 JSON 对比:XML 解析比 JSON 更复杂,若非必要,推荐优先使用 JSON 数据格式。

相关文档

  • 文档不可视类型组件_后台任务 —— 在后台线程中执行耗时解析
  • 文档前端(JavaScript)函数_数据操作类 —— 解析XML文本 等前端函数
  • 文档轻语言网站:轻语言语法速查 —— 异常处理(尝试...捕获)语法
  • 文档服务端(PHP)函数 —— 后端 PHP 的 XML 处理函数