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