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,提问作者конструктор
相关产品推荐
相关产品推荐

