DOM de paquets XFA

TXFAPacketDOM charge soit un flux XDP complet, soit un tableau de paquets /XFA PDF ordonné, expose les racines de paquets et des requêtes de chemins par nom local bornées, et prend en charge les éditions d’éléments, de texte, de CDATA, d’attributs, d’ajout, de suppression et de renommage de paquets

Paquets intacts sans perte

Chaque flux ou paquet chargé conserve ses octets d’origine et une empreinte structurelle ; la sérialisation renvoie ces octets exacts quand le DOM est intact, et une édition du tableau de paquets ne réécrit que le paquet modifié tout en préservant à l’octet près chaque frère inchangé

Sortie canonique des contenus modifiés

Les arbres modifiés utilisent du XML UTF-8, un ordre déterministe des espaces de noms et attributs, des noms d’éléments qualifiés, l’échappement des entités XML, une scission CDATA sûre pour les ]]> intégrés, des éléments vides auto-fermants et l’ordre des paquets du tableau source

La sortie canonique représente le contenu du DOM plutôt que les détails lexicaux, si bien que commentaires, instructions de traitement, indentation source, déclaration XML d’origine et DOCTYPE source ne sont pas rejoués après une édition ; les valeurs des entités internes sont développées en texte et les entités externes restent non résolues

Requêtes et éditions

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 // initial effectue une requête descendante bornée, tandis que les segments séparés par des barres obliques sélectionnent les enfants directs ; * correspond à tout élément et un suffixe [N] à base zéro sélectionne une correspondance

Publication du tableau de paquets

SerializePacketArray renvoie des records TXFAPacketData ordonnés ; passez chaque record à THotPDF.AddXFAPacket, ou utilisez SerializeXDPStream avec THotPDF.SetXFADocument pour la forme à flux unique

Budgets

TXFADOMLimits.Default borne les octets d’entrée et de sortie cumulés, le nombre de paquets, le nombre de nœuds, la profondeur, les attributs par nœud, les octets d’attributs et de texte cumulés et MaxQueryResults ; le parsing, la validation des mutations, les requêtes, le calcul d’empreinte et la sérialisation échouent avec EHPDFXFAError lorsqu’une frontière est franchie

Voir TXFAPacketDOM, TXFANode et TXFADOMLimits