TXFADataStructure Class
TXFADataStructure, gedeclareerd in HPDFXFADataStructure, onderhoudt begrensde structurele bewerkingen op een bestaande native XFA-node-boom en is eigenaar van alle gedetachte elementbomen die via de graaf worden aangemaakt, gekloond of verwijderd
CreateDataNode bedient Data DOM-elementen, terwijl CreateElement ook de model-element-constructie ondersteunt die TXFAFormStructure gebruikt
De constructor leent Root en valideert de bestaande boom tegen TXFADataStructureLimits vóór terugkeer; de graaf moet vóór de eigenaar van de geleende root worden vernietigd
Alle publieke AnsiString-namen, namespace-URI's en tekstwaarden bevatten UTF-8-bytes
Graph := TXFADataStructure.Create(DatasetsRoot, Limits, OnTick);
try
Graph.BeginOperation(OnTick);
try
Node := Graph.CreateDataNode('dataValue', 'amount');
Graph.SetValue(Node, '42');
Graph.Append(RecordNode, Node);
finally
Graph.EndOperation;
end;
finally
Graph.Free;
end;
Operation-scope
BeginOperation(OnTick) start een scope en verwerpt een nested scope; EndOperation geeft de vastgehouden callback vrij en is veilig tijdens opruiming
De constructor draait diens eigen preflight-scope en geeft de constructor-callback vrij vóór terugkeer; daaropvolgende methodes vragen een nieuwe actieve scope
OnTick is een Delphi anonieme procedure of een FPC nested procedure van type TXFADataStructureTick; hij mag raisen om werk te annuleren of een caller-deadline of operation-counter af te dwingen
Methodes bereiden allocaties, eigendomscapaciteit en vereiste namespace-declaraties voor vóór diens finale annuleringscheck en structurele mutatie; een geweigerde individuele bewerking behoudt de bestaande documentgraaf
Een reeks geslaagde directe graafaanroepen wordt niet automatisch teruggedraaid wanneer een latere aanroep faalt; de scripting-runtime levert de complete event-transactie en herstelt diens document, gedetachte graaf, script-identiteiten, lexicale status en journal samen
Creëren en klonen
CreateDataNode(ClassName, Name, NamespaceURI = '') accepteert dataGroup of dataValue, maakt een verse gedetachte element aan en registreert expliciete data-node-klassa-metadata
CreateElement(ClassName, Name, NamespaceURI) maakt een gedetacht model-element aan waarvan de XML lokale naam ClassName is, met een optioneel XFA name-attribute en een expliciete default namespace-declaratie
CreateElement valideert XML-syntax, scalar-waarden, gereserveerde namespace-URI's en graafcapaciteit; de hogere-niveau-formulier-factory valideert het ondersteunde XFA-klassa-schema
Name mag een XML lokale naam zijn of een gekwalificeerde naam waarvan het niet-lege prefix de meegeleverde niet-lege namespace-URI heeft; gereserveerde xml- en xmlns-bindings worden gevalideerd
Een lege naam is toegestaan voor een gedetachte constructiestap; zet een geldige naam met Rename vóór koppeling
Clone(Node, Recursive = True) maakt een gedetachte kopie met verse native identiteiten; een shallow-kopie houdt de eigen waarde, attributes en namespace-declaraties van het element vast terwijl kindnodes worden uitgesloten
Geërfde namespace-declaraties worden gematerialiseerd vóór een kloon of verhuizing zodat geprefixeerde attributes diens originele namespace behouden buiten diens vorige ouderscope
Eigendomsbewerkingen
Append(Parent, Node) verplaatst dezelfde node naar het einde van de geordende kinderen van de ouder; InsertBefore(Parent, Node, Before) verplaatst hem vóór een bestaand direct kind, met Before = nil gelijk aan append
Remove(Parent, Node) detacht het bestaande directe kind en draagt diens eigendom over aan de graaf; het object, afstammelingen en native identiteiten blijven geldig tot graafdestructie of gedetachte snapshot-herstel
Foreign grafen, cycli, de geleende root verplaatsen, naamloze koppeling, ongeldige sibling-referenties en node/diepte/byte-overflow raisen EHPDFXFAError
Waarde- en naam-bewerkingen
Rename(Node, Name) wijzigt de lokale XML-naam van het element met behoud van diens prefix, namespace-URI, positie, afstammelingen en native identiteit; een gekoppeld element vraagt een niet-lege geldige XML-naam
SetValue(Node, Value) valideert UTF-8- en XML-scalar-waarden, vervangt gewone tekstkinderen en behoudt comments en processing instructions; lege tekst verwijdert gewone tekstkinderen
SetAttribute(Node, Name, Value) voegt een attribute toe of vervangt het na validatie van diens gekwalificeerde-naam-syntax, UTF-8-waarde en geprojecteerd bytebudget; een lege waarde blijft een expliciet leeg attribute
SetNamespace(Node, NamespaceURI) wijzigt de uitgeklapte namespace van het element en werkt de declaratie voor diens huidige prefix bij, met validatie van gereserveerde bindings
DeclareNamespace(Node, Prefix, NamespaceURI) voegt een namespace-declaratie toe of vervangt die zonder de uitgeklapte naam van het element te wijzigen; hij verwerpt een conflicterende declaratie voor het eigen prefix van het element
Directe graafaanroepers coördineren geprefixeerde attributes met diens namespace-declaraties en houden samengestelde bewerkingen binnen diens eigen rollback-transactie
Het byte- en nodebudget omvat de geaggregeerde waarde van het element en diens echte owned tekstnode, in plaats van slechts één representatie van de tekst te rekenen
XML-import-preflight
ValidateImport(Node, Incoming, Overwrite, OnTick) checkt de geprojecteerde geaggregeerde graaf voordat een aanroeper een owned lijst van inkomende XML-kinderen importeert
Wanneer Overwrite true is, sluit de geprojecteerde grootte de vervangen kinderen en geaggregeerde waarde van de target uit; anders blijven bestaande kinderen in het budget
De methode laat de inkomende lijst en het document ongewijzigd en maakt alleen een tijdelijke operation-scope aan wanneer er nog geen scope actief is
Gedetachte snapshots
CaptureDetached geeft een waarde-snapshot van elke gedetachte root en afstammeling terug, inclusief tekst, CDATA, comments, processing instructions, attributes en namespace-declaraties
RestoreDetached(Snapshot) valideert en bereidt een vervangend gedetacht bos voor vóór eigendomsuitwisseling; diens teruggegeven node-array volgt de snapshot-volgorde en bevat verse native identiteiten voor caller-remapping
Zie TXFADataStructureSnapshot voor recordvelden en identiteitsregels
Inspectie
Root legt de geleende root bloot en DetachedRoots legt de graaf-owned roots bloot voor inspectie; gebruik graafmethodes voor wijzigingen zodat eigendom en budgetten coherent blijven
Transactionele Data DOM-scripting · Transactionele form-boom-scripting · TXFANode