TXFADataStructure Class
TXFADataStructure, deklarerad i HPDFXFADataStructure, upprätthåller avgränsade strukturella redigeringar av en befintlig nativ XFA Data DOM och äger fristående elementträd som skapats, klonats eller tagits bort genom grafen
CreateDataNode betjänar Data DOM-element, medan CreateElement även stöder den modellelementkonstruktion som används av TXFAFormStructure
Konstruktorn lånar Root och validerar det befintliga trädet mot TXFADataStructureLimits innan den returnerar; grafen måste förstöras före ägaren av den lånade roten
Alla publika AnsiString namn, namnområdes-URI:er och textvärden innehåller UTF-8-byte
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;
Operationsscope
BeginOperation(OnTick) startar ett scope och avvisar ett kapslat scope; EndOperation släpper den lagrade återanropet och är säkert under städning
Konstruktorn kör sitt eget preflight-scope och släpper konstruktorns återanrop innan den returnerar; efterföljande metoder kräver ett nytt aktivt scope
OnTick är en Delphi-anonym procedur eller en FPC-kapslad procedur av typ TXFADataStructureTick; den kan kasta för att avbryta arbete eller tillämpa en anropartidsgräns eller operationsräknare
Metoder förbereder allokeringar, ägarskapskapacitet och obligatoriska namnområdesdeklarationer före sin slutliga avbrottskontroll och strukturella mutation; en avvisad enskild redigering bevarar den befintliga dokumentgrafen
En serie lyckade direkta grafanrop rullas inte automatiskt tillbaka när ett senare anrop misslyckas; skriptkörtiden tillhandahåller hela händelsetransaktionen och återställer sitt dokument, fristående graf, skriptidentiteter, lexikalt tillstånd och journal tillsammans
Skapande och kloning
CreateDataNode(ClassName, Name, NamespaceURI = '') accepterar dataGroup eller dataValue, skapar ett färskt fristående element och registrerar explicit datanodklassmetadata
Name kan vara ett XML-lokalt namn eller ett kvalificerat namn vars icke-tomma prefix har den tillhandahållna icke-tomma namnområdes-URI:n; reserverade xml och xmlns bindningar valideras
Ett tomt namn tillåts för ett fristående konstruktionsteg; sätt ett giltigt namn med Rename innan fästning
Name kan vara ett XML-lokalt namn eller ett kvalificerat namn vars icke-tomma prefix har den tillhandahållna icke-tomma namespace-URI:n; reserverade xml- och xmlns-bindningar valideras
Ett tomt namn tillåts för ett fristående konstruktionssteg; sätt ett giltigt namn med Rename innan bifogning
Clone(Node, Recursive = True) skapar en fristående kopia med färska nativa identiteter; en ytlig kopia behåller elementets eget värde, attribut och namnområdesdeklarationer medan barnnoder exkluderas
Ärvda namnområdesdeklarationer materialiseras före kloning eller flytt så att prefixade attribut behåller sitt ursprungliga namnområde utanför sin tidigare förfadersscope
Ägarskapsredigeringar
Append(Parent, Node) flyttar samma nod till slutet av förälderns ordnade barn; InsertBefore(Parent, Node, Before) flyttar den före ett befintligt direkt barn, med Before = nil ekvivalent med append
Remove(Parent, Node) frigör det befintliga direkta barnet och överför dess ägarskap till grafen; objektet, efterkommandena och de nativa identiteterna förblir giltiga tills grafens förstöring eller fristående ögonblicksbildsåterställning
Främmande grafer, cykler, flyttning av den lånade roten, namnlös fästning, ogiltiga syskonreferenser samt nod-/djup-/byteöverlopp kastar EHPDFXFAError
Värde- och namnredigeringar
Rename(Node, Name) ändrar elementets lokala XML-namn samtidigt som dess prefix, namnområdes-URI, position, efterkommanden och nativa identitet behålls; ett fäst element kräver ett icke-tomt giltigt XML-namn
SetValue(Node, Value) validerar UTF-8- och XML-skaliärvärden, ersätter ordinära textbarn och bevarar kommentarer och bearbetningsinstruktioner; tom text tar bort ordinära textbarn
SetAttribute(Node, Name, Value) lägger till eller ersätter ett attribut efter validering av dess kvalificerade namnsyntax, UTF-8-värde och projicerad bytebudget; ett tomt värde förblir ett uttryckligt tomt attribut
SetNamespace(Node, NamespaceURI) ändrar elementets utvidgade namnrymd och uppdaterar deklarationen för dess nuvarande prefix, samtidigt som reserverade bindningar valideras
DeclareNamespace(Node, Prefix, NamespaceURI) lägger till eller ersätter en namespace-deklaration utan att ändra elementets utvidgade namn; den avvisar en motstridig deklaration för elementets eget prefix
Direkta grafanropare samordnar prefixförsedda attribut med sina namespace-deklarationer och håller sammansatta redigeringar inom sin egen rollback-transaktion
Byte- och nodbudgetarna inkluderar elementets samlade värde och dess faktiska ägda textnod, i stället för att debitera endast en representation av texten
XML-import preflight
ValidateImport(Node, Incoming, Overwrite, OnTick) kontrollerar den projicerade samlade grafen innan en anropare importerar en ägd lista av inkommande XML-barn
När Overwrite är true exkluderar den projicerade storleken målets ersatta barn och samlade värde; i annat fall förblir befintliga barn i budgeten
Metoden lämnar den inkommande listan och dokumentet oförändrade och skapar ett tillfälligt operationsscope endast när inget scope redan är aktivt
Fristående ögonblicksbilder
CaptureDetached returnerar en värdeögonblicksbild av varje fristående rot och efterkommande, inklusive text, CDATA, kommentarer, bearbetningsinstruktioner, attribut och namnområdesdeklarationer
RestoreDetached(Snapshot) validerar och förbereder en ersättande fristående skog före ägarskapsbyte; dess returnerade nodarray följer ögonblicksbildsordningen och innehåller färska nativa identiteter för anroparomappning
Se TXFADataStructureSnapshot för postfält och identitetsregler
Inspektion
Root exponerar den lånade roten och DetachedRoots exponerar grafägda rötter för inspektion; använd grafmetoder för ändringar så att ägarskap och budgetar förblir sammanhängande