XFA Packet DOM

TXFAPacketDOM carga un stream XDP completo o un array ordenado de packets /XFA del PDF, expone las raíces de los packets y consultas de paths por local name acotadas, y soporta ediciones de elementos, texto, CDATA, atributos, agregar packet, eliminar packet y renombrar packet

Packets intactos sin pérdida

Cada stream o packet cargado conserva sus bytes originales y un fingerprint estructural; la serialización devuelve esos bytes exactos cuando el DOM está intacto, y una edición del packet array reescribe solo el packet cambiado preservando byte a byte cada hermano sin cambios

Salida canónica modificada

Los árboles modificados usan XML UTF-8, orden determinista de namespaces y atributos, nombres de elementos calificados, escape de entidades XML, división segura de CDATA para ]]> incrustado, elementos vacíos self-closing y el orden de packets del array fuente

La salida canónica representa el contenido del DOM y no la trivia léxica, así que los comentarios, las processing instructions, la indentación de la fuente, la declaración XML original y un DOCTYPE de la fuente no se reproducen después de una edición; los valores de entidades internas se expanden como texto y las entidades externas quedan 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 hace una consulta acotada de descendientes, mientras que los segmentos separados por slash seleccionan hijos directos; * coincide con cualquier elemento y un sufijo [N] basado en cero selecciona una coincidencia

Publicación del packet array

SerializePacketArray devuelve records TXFAPacketData ordenados; pase cada record a THotPDF.AddXFAPacket, o use SerializeXDPStream con THotPDF.SetXFADocument para la forma de stream único

Presupuestos

TXFADOMLimits.Default acota los bytes agregados de entrada y salida, el conteo de packets, el conteo de nodos, la profundidad, los atributos por nodo, los bytes agregados de atributos y texto, y MaxQueryResults; el parseo, la validación de mutaciones, las consultas, el fingerprinting y la serialización fallan con EHPDFXFAError cuando se cruza una frontera

Vea TXFAPacketDOM, TXFANode y TXFADOMLimits