原生 Data DOM XML
Unit: HPDFXFARuntime
Methods
dataNode.loadXML(xml, ignoreRoot = true, overwrite = false);
const compact = dataNode.saveXML();
const readable = dataNode.saveXML("pretty");
这些脚本方法在 TXFAWidgetRuntime 事件中的 datasets、dataGroup 和 dataValue 节点上可用
saveXML 返回带声明的 UTF-8 XML,选定节点作为文档元素;可选的 pretty 参数为纯元素内容添加缩进
loadXML 接受一个格式良好的 XML 文档;ignoreRoot 把其子节点导入选定节点,传 False 则把源文档元素作为子节点导入
overwrite 在导入前移除既有目标内容;默认 False 追加内容并保留既有子节点标识
选定节点保留其标识与属性;导入的子节点属性及其命名空间映射得以保留
即时图与绑定
const record = xfa.datasets.data.main;
record.loadXML("<main><amount>42</amount></main>", true, true);
const amount = record.amount;
amount.value = "43";
if (this.parent.amount.rawValue !== "43") throw new Error("Missing binding update");
原生解析成功后立即把导入的子节点装入当前脚本图;普通属性和 SOM 选择器在事件发布之前即可解析这些新节点
数据单元格与绑定的字段别名双向同步,包括隐藏字段、新提供的绑定目标以及既有的后代、通配、类和数字索引 dataRef 选择器
标量到组的导入会更新目标的数据类并暴露其导入的子元素;被清空的 dataValue 的值为空字符串
导入新数据元素不会为未解析绑定凭空分配无关的歧义数据叶子
标识与重复作用域
overwrite 使旧的子节点句柄失效并发布新的子节点标识;脚本对象可以保留新导入的数据句柄,并在后续事件中使用
追加保留既有句柄;在重复行内导入会改变该行的原生数据作用域和绑定字段
XML 导入也可以在同一事件内由 addInstance 创建的 occurrence 中进行
替换 datasets 内容会把 $data 和 $record 更新为新的原生根,并对幸存的表单与脚本对象标识做重定基,使词法模块状态仍挂在其表单作用域上
内容与持久化
原生导入和保存的 XDP 按顺序保留普通文本、CDATA、注释和处理指令
注释和处理指令保持在普通 Data DOM 元素选择之外,不会变成可见字段文本
导入节点保留其命名空间 URI,即使位于不同的祖先默认命名空间之下,包括为无命名空间元素显式声明空默认命名空间的情况
带前缀的外来属性保留展开名,Unicode 本地名、带变音符的文本和增补字符在原生保存与重新加载后依然存在
只读的 saveXML 不会物化表单属性,也不会改变保存的 XDP 字节
验证与回滚
原生 XML 解析器在图变更前检查格式良构性、命名空间与属性有效性、XML 字符、声明位置和实体语法
格式错误的输入可以在 JavaScript 中捕获;此前的原生与脚本图保持可用,后续有效的变更仍可提交
失败的事件恢复文档字节、widget 值、导入图、标识和脚本对象词法状态,包括原生 XML 导入已应用之后的失败
每个原生 JavaScript 会话在为响应重放重建引擎时保留其实际 DLL 模块;引擎、上下文和日志保持独立,模块引用在最后的原生引擎拆除后释放
XML 解析与序列化和运行时原有的事件截止时间及值字符限制一起执行操作、深度、节点、字节和耗时预算
导入不解析外部实体,也不执行文件、网络或 UI 动作;此解析器拒绝 DTD 声明
当前范围
此事件运行时集成目前面向 Windows Win32 与 Win64;可移植 Linux 运行时集成仍在计划中
此集成提供原生 XML 导入与序列化以及当前绑定重新求值;独立的 createNode、任意数据属性修改、重新挂载父级、记录窗口导航、绑定谓词和全局绑定策略仍是独立的对象模型目标
Related APIs
Native Data DOM, Native Bind SOM, TXFAEventBinding, TXFAEventAction 和 Interactive XFA Runtime