XFA 数据包 DOM
TXFAPacketDOM 加载完整的 XDP 流或有序的 PDF /XFA 数据包数组,公开数据包根和有界的本地名称路径查询,并支持元素、文本、CDATA、属性、数据包添加、数据包移除和数据包重命名编辑
无损未触及数据包
每个加载的流或数据包保留其原始字节和结构指纹;当 DOM 未触及时序列化返回那些确切字节,数据包数组编辑只重写更改的数据包,同时逐字节保留每个未更改的兄弟数据包
规范修改输出
修改后的树使用 UTF-8 XML、确定性的命名空间和属性顺序、限定元素名称、XML 实体转义、嵌入式 ]]> 的安全 CDATA 拆分、自闭合空元素以及源数组中的数据包顺序
规范输出表示 DOM 内容而不是词法琐碎信息,因此注释、处理指令、源缩进、原始 XML 声明和源 DOCTYPE 在编辑后不会重放;内部实体值展开为文本,外部实体保持未解析
查询与编辑
var
DOM: TXFAPacketDOM;
Nodes: TArray<TXFANode>;
XDP: TBytes;
begin
DOM := TXFAPacketDOM.Create;
try
DOM.LoadXDPStream(SourceBytes);
Nodes := DOM.SelectNodes('datasets', '//customer/name');
if Length(Nodes) > 0 then
Nodes[0].SetText('Updated & verified', True);
XDP := DOM.SerializeXDPStream;
PDF.SetXFADocument(XDP);
finally
DOM.Free;
end;
end;
前导 // 执行有界的后代查询,而斜杠分隔的段选择直接子元素;* 匹配任何元素,从零开始的 [N] 后缀选择一个匹配
数据包数组发布
SerializePacketArray 返回有序的 TXFAPacketData 记录;请把每条记录传给 THotPDF.AddXFAPacket,或使用 SerializeXDPStream 配合 THotPDF.SetXFADocument 处理单流形式
预算
TXFADOMLimits.Default 约束聚合输入和输出字节、数据包数、节点数、深度、每节点属性数、聚合属性和文本字节以及 MaxQueryResults;当越过边界时,解析、变更验证、查询、指纹计算和序列化以 EHPDFXFAError 失败