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

Dyalog APL:如何将对象数组写入XML文件及从XML导入?

APL中People对象数组的XML持久化方案

一、导出对象数组到XML文件

通过遍历对象数组提取所有公共字段,构造标准XML结构后写入文件,实现数据持久化:

∇ ExportPeoplesToXML filePath
    :Access Public
    xmlHeader ← '<?xml version="1.0" encoding="UTF-8"?>'
    rootStart ← '<Peoples>'
    rootEnd ← '</Peoples>'
    items ← ''
    :For person :In Peoples
        item ← '<Person>'
        :Each field :In ⊂'Type' 'Name' 'Company' 'Position' 'Fax' 'Email'
            value ← ⎕AT person field
            item,← '<',field,'>',value,'</',field,'>'
        :EndEach
        item,← '</Person>'
        items,← item
    :EndFor
    fullXML ← xmlHeader,⊂rootStart,⊂items,⊂rootEnd
    ⎕NPUT filePath 1 fullXML  ⍝ 1表示覆盖写入模式
    ⎕← '导出完成,文件路径:',filePath
∇

调用示例:

ExportPeoplesToXML 'peoples.xml'

二、从XML文件导入对象数组

读取XML内容后解析每个节点的字段值,通过类构造函数创建对象并组装为数组:

∇ Peoples ← ImportPeoplesFromXML filePath
    :Access Public
    xmlContent ← ⎕NGET filePath 1  ⍝ 读取文件全部内容
    ⍝ 提取所有Person节点的内容
    personNodes ← ⊃⎕S('\<Person\>(.*?)\<\/Person\>' 's') xmlContent
    Peoples ← ⍬
    :For node :In personNodes
        fields ← 'Type' 'Name' 'Company' 'Position' 'Fax' 'Email'
        values ← {}
        :Each field :In fields
            val ← ⊃⎕S('\<',field,'\>(.*?)\<\/',field,'\>' 's') node
            values,← val
        :EndEach
        ⍝ 先通过构造函数初始化核心字段
        person ← ⎕New People values[2 3 4]  ⍝ 对应Name、Company、Position
        ⍝ 补充赋值其余字段
        person.Type ← values[1]
        person.Fax ← values[5]
        person.Email ← values[6]
        Peoples,← person
    :EndFor
    ⎕← '导入完成,共加载',≢Peoples,'个对象'
∇

调用示例:

Peoples ← ImportPeoplesFromXML 'peoples.xml'

补充说明

  • 导出逻辑会完整保留People类所有公共字段的数据,确保持久化无遗漏;
  • 导入时优先使用类构造函数初始化必填字段,再补全其他字段,完全匹配类的定义规则;
  • 代码中用⎕S正则解析XML,适合结构简单的场景,若需处理复杂XML,可结合Dyalog APL的原生XML工具库优化。

内容的提问来源于stack exchange,提问作者конструктор

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:34:50