DOM dei Pacchetti XFA

TXFAPacketDOM carica uno stream XDP completo o un packet array /XFA PDF ordinato, espone radici dei pacchetti e query di path per local-name con limiti, e supporta modifiche a elementi, testo, CDATA, attributi, packet-add, packet-remove e packet-rename

Pacchetti intatti lossless

Ogni stream o pacchetto caricato conserva i suoi byte originali e una fingerprint strutturale; la serializzazione restituisce quegli stessi byte esatti quando il DOM è intatto, e una modifica al packet array riscrive solo il pacchetto cambiato, preservando byte per byte ogni sibling invariato

Output canonico delle modifiche

Gli alberi modificati usano XML UTF-8, ordine deterministico di namespace e attributi, nomi di elemento qualificati, escape di entità XML, split sicuro dei CDATA per ]]> incorporato, elementi vuoti self-closing e ordine dei pacchetti dall'array sorgente

L'output canonico rappresenta il contenuto del DOM e non la trivia lessicale, quindi commenti, processing instructions, indentazione della sorgente, dichiarazione XML originale e una DOCTYPE della sorgente non vengono riprodotti dopo una modifica; i valori delle entità interne vengono espansi come testo e le entità esterne restano irrisolte

Query e modifiche

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 // iniziale esegue una query discendente con limiti, mentre i segmenti separati da slash selezionano figli diretti; * corrisponde a qualunque elemento e un suffisso [N] zero-based seleziona una corrispondenza

Pubblicazione del packet array

SerializePacketArray restituisce record TXFAPacketData ordinati; passa ogni record a THotPDF.AddXFAPacket, oppure usa SerializeXDPStream con THotPDF.SetXFADocument per la forma a stream singolo

Budget

TXFADOMLimits.Default limita byte aggregati di input e output, conteggio dei pacchetti, conteggio dei nodi, profondità, attributi per nodo, byte aggregati di attributi e testo e MaxQueryResults; parsing, validazione delle mutazioni, query, fingerprinting e serializzazione falliscono con EHPDFXFAError quando un confine viene superato

Vedi TXFAPacketDOM, TXFANode e TXFADOMLimits