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

Transaktionellt Data DOM-skriptande · TXFANode