XFA-Paket-DOM
TXFAPacketDOM lädt entweder einen vollständigen XDP-Stream oder ein geordnetes PDF-/XFA-Paket-Array, stellt Paketstämme und begrenzte Local-Name-Pfadabfragen bereit und unterstützt Element-, Text-, CDATA-, Attribut-, Paket-Add-, Paket-Remove- und Paket-Rename-Edits
Verlustfreie unberührte Pakete
Jeder geladene Stream und jedes Paket behält seine Originalbytes und einen strukturellen Fingerabdruck; die Serialisierung liefert genau diese Bytes, solange das DOM unberührt ist, und eine Paket-Array-Änderung schreibt nur das geänderte Paket neu, während jedes unveränderte Geschwisterpaket byteerhalten bleibt
Kanonische geänderte Ausgabe
Geänderte Bäume verwenden UTF-8-XML, deterministische Namespace- und Attributreihenfolge, qualifizierte Elementnamen, XML-Entity-Escaping, sicheres CDATA-Splitting für eingebettetes ]]>, selbstschließende leere Elemente und die Paketreihenfolge des Quell-Arrays
Kanonische Ausgabe repräsentiert DOM-Inhalt statt lexikalischer Beigaben, daher werden Kommentare, Processing Instructions, Quell-Einrückung, die ursprüngliche XML-Deklaration und ein Quell-DOCTYPE nach einer Änderung nicht wiedergegeben; interne Entity-Werte werden als Text expandiert und externe Entities bleiben unaufgelöst
Abfragen und Änderungen
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;
Ein führendes // führt eine begrenzte Descendant-Abfrage aus, während slash-getrennte Segmente direkte Kinder wählen; * matcht jedes Element und ein nullbasierter [N]-Suffix wählt einen Treffer
Paket-Array-Veröffentlichung
SerializePacketArray liefert geordnete TXFAPacketData-Records; übergeben Sie jeden Record an THotPDF.AddXFAPacket, oder verwenden Sie SerializeXDPStream mit THotPDF.SetXFADocument für die Single-Stream-Form
Budgets
TXFADOMLimits.Default begrenzt aggregierte Ein- und Ausgabebytes, Paketanzahl, Knotenanzahl, Tiefe, Attribute pro Knoten, aggregierte Attribut- und Textbytes sowie MaxQueryResults; Parsen, Mutationsvalidierung, Abfragen, Fingerprinting und Serialisierung schlagen mit EHPDFXFAError fehl, sobald eine Grenze überschritten wird
Siehe TXFAPacketDOM, TXFANode und TXFADOMLimits