原生 Data DOM XML
單元:HPDFXFARuntime
方法
dataNode.loadXML(xml, ignoreRoot = true, overwrite = false);
const compact = dataNode.saveXML();
const readable = dataNode.saveXML("pretty");
這些腳本方法在 TXFAWidgetRuntime 事件中可用於 datasets、dataGroup 與 dataValue 節點
saveXML 回傳帶宣告的 UTF-8 XML,並以所選節點作為文件元素;選填的 pretty 引數會為純元素內容加上縮排
loadXML 接受一份格式正確的 XML 文件;ignoreRoot 為真時把其子節點匯入所選節點,為 False 時則把來源文件元素本身當作子節點匯入
overwrite 會在匯入前移除既有目標內容;預設 False 為附加內容並保留既有子節點識別
所選節點保留自己的識別與屬性;匯入子節點的屬性與其命名空間映射都會被保留
立即生效的圖形與繫結
const record = xfa.datasets.data.main;
record.loadXML("<main><amount>42</amount></main>", true, true);
const amount = record.amount;
amount.value = "43";
if (this.parent.amount.rawValue !== "43") throw new Error("Missing binding update");
原生解析成功後會立即把匯入的子節點裝進目前的腳本圖;一般屬性與 SOM 選擇器在事件發布前就能解析到這些新節點
資料儲存格與繫結欄位別名雙向同步,包括隱藏欄位、新提供的繫結目標,以及既有的後代、萬用字元、類別與數值索引 dataRef 選擇器
純量對群組的匯入會更新目標的資料類別,並公開其匯入的子元素;被清空的 dataValue 其值為空字串
匯入新的資料元素不會為未解析的繫結配置無關的曖昧資料葉節點
識別與重複範圍
overwrite 會使舊的子節點 handle 失效並發布新的子節點識別;script object 可以保留剛匯入的資料 handle,在後續事件中繼續使用
附加模式保留既有 handle;在重複列內匯入會改變該列的原生資料範圍與繫結欄位
XML 匯入也能作用在同一事件中由 addInstance 建立的出現個體內
替換 datasets 內容會把 $data 與 $record 更新為新的原生根節點,並為存留下來的表單與 script object 識別重新定基,讓語彙模組狀態仍附著於其表單範圍
內容與持久化
原生匯入與已儲存的 XDP 會按順序保留一般文字、CDATA、註解與處理指示
註解與處理指示留在一般 Data DOM 元素選取之外,也不會變成可見的欄位文字
匯入節點保留自己的命名空間 URI,即使位於不同的上層預設命名空間之下也一樣,包括為無命名空間元素明確宣告空預設命名空間的情況
帶字首的外部屬性保留展開名稱;Unicode 本機名稱、含變音符號的文字與增補字元都能在原生儲存與重新載入後存留
唯讀的 saveXML 不會實體化表單 property,也不會改變已儲存的 XDP 位元組
驗證與回復
原生 XML 解析器在圖形變更前檢查格式正確性、命名空間與屬性有效性、XML 字元、宣告位置與實體語法
格式錯誤的輸入可以在 JavaScript 中捕捉;先前的原生與腳本圖仍然可用,之後一次有效的變更仍可提交
事件失敗會還原文件位元組、widget 值、匯入的圖形、識別與 script object 語彙狀態,即使原生 XML 匯入已經套用也一樣
每個原生 JavaScript session 在為回應重播重建引擎時,會保留其實際的 DLL 模組;引擎、context 與日誌保持獨立,模組參考在最後一個原生引擎拆除後釋放
XML 解析與序列化會強制執行操作、深度、節點、位元組與經過時間預算,連同執行階段原有的事件期限與值字元限制
匯入不會解析外部實體,也不執行檔案、網路或 UI 動作;此解析器拒絕 DTD 宣告
目前範圍
這個事件執行階段整合目前以 Windows Win32 與 Win64 為目標;可攜式 Linux 執行階段整合仍待後續
這項整合提供原生 XML 匯入與序列化,加上目前的繫結重新評估;獨立的 createNode、任意資料屬性變更、重新掛父、記錄視窗導覽、繫結述詞與全域繫結原則,仍是另外的物件模型目標
相關 API
原生 Data DOM、原生 Bind SOM、TXFAEventBinding、TXFAEventAction 與互動式 XFA 執行環境