XFA-paket-DOM

TXFAPacketDOM läser in antingen en komplett XDP-ström eller en ordnad PDF-/XFA-paketarray, exponerar paketrötter och avgränsade sökfrågor med lokala namn och stödjer redigeringar av element, text, CDATA, attribut, paketläggning, paketborttagning och paketnamnbyte

Förlustfria orörda paket

Varje inläst ström eller paket behåller sina ursprungliga bytes och ett strukturellt fingeravtryck, serialisering returnerar exakt dessa bytes när DOM:et är orört, och en paketarrayredigering skriver endast om det ändrade paketet samtidigt som varje oförändrad syskonbyte bevaras

Kanonisk ändrad utdata

Ändrade träd använder UTF-8-XML, deterministisk namnrymd- och attributordning, kvalificerade elementnamn, XML-enhetsekapande, säker CDATA-splittring för inbäddet ]]>, självstängande tomma element och paketordning från källarrayen

Kanonisk utdata representerar DOM-innehåll snarare än lexikalisk trivia, så kommentarer, processinstruktioner, källindragning, den ursprungliga XML-deklarationen och ett käll-DOCTYPE återspelas inte efter en redigering, interna entitetsvärden expanderas som text och externa entiteter förblir olösta

Frågor och redigeringar

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;

Ett inledande // utför en avgränsad ättlingsfråga, medan snedstrecksseparerade segment väljer direkta underordnade, * matchar vilket element som helst och ett nollbaserat [N]-suffix väljer en matchning

Paketarray-publicering

SerializePacketArray returnerar ordnade TXFAPacketData-poster, skicka varje post till THotPDF.AddXFAPacket, eller använd SerializeXDPStream med THotPDF.SetXFADocument för enkelströmsformen

Budgetar

TXFADOMLimits.Default begränsar aggregerade in- och utbytes, paketantal, nodantal, djup, attribut per nod, aggregerade attribut- och textbytes samt MaxQueryResults, tolkning, mutationsvalidering, fråga, fingeravtryck och serialisering misslyckas med EHPDFXFAError när en gräns korsas

Se TXFAPacketDOM, TXFANode och TXFADOMLimits