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