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