XFA Packet DOM
TXFAPacketDOM carga un flujo XDP completo o una matriz de paquetes PDF /XFA ordenada, expone las raíces de paquetes y las consultas de ruta de nombre local acotadas, y admite ediciones de elemento, texto, CDATA, atributo, agregar paquete, quitar paquete y renombrar paquete
Paquetes sin tocar sin pérdidas
Cada flujo o paquete cargado conserva sus bytes originales y una huella estructural; la serialización devuelve esos bytes exactos cuando el DOM no se ha tocado, y una edición de matriz de paquetes reescribe solo el paquete cambiado conservando byte a byte cada hermano sin cambios
Salida modificada canónica
Los árboles modificados usan XML UTF-8, orden determinista de espacios de nombres y atributos, nombres de elemento calificados, escape de entidades XML, división segura de CDATA para ]]> incrustado, elementos vacíos autocerrados y el orden de paquetes de la matriz de origen
La salida canónica representa el contenido del DOM en lugar de los detalles léxicos, por lo que los comentarios, las instrucciones de procesamiento, la sangría del origen, la declaración XML original y un DOCTYPE de origen no se reproducen después de una edición; los valores de entidades internas se expanden como texto y las entidades externas permanecen sin resolver
Consultas y ediciones
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;
Un // inicial realiza una consulta de descendientes acotada, mientras que los segmentos separados por barras seleccionan hijos directos; * coincide con cualquier elemento y un sufijo [N] basado en cero selecciona una coincidencia
Publicación de matriz de paquetes
SerializePacketArray devuelve registros TXFAPacketData ordenados; pasa cada registro a THotPDF.AddXFAPacket, o usa SerializeXDPStream con THotPDF.SetXFADocument para la forma de flujo único
Presupuestos
TXFADOMLimits.Default acota los bytes de entrada y salida agregados, el recuento de paquetes, el recuento de nodos, la profundidad, los atributos por nodo, los bytes de atributo y texto agregados y MaxQueryResults; el análisis, la validación de mutación, las consultas, la toma de huellas y la serialización fallan con EHPDFXFAError cuando se cruza un límite
Consulta TXFAPacketDOM, TXFANode y TXFADOMLimits