XQuery/轉換樣式
外觀
< XQuery
您有一些文件需要從一種格式轉換為另一種格式。您想知道什麼方法最適合您的情況。
有幾種不同的方法或轉換樣式可用於將文件從一種格式轉換為另一種格式。每種方法都有其基於您要轉換的資料型別的優點或缺點。
- 模板方法
- 過濾器方法
- 型別轉換方法
- XSLT 方法
- 方法組合
此方法類似於我們用來將大型檔案拆分為多個較小檔案的“拆分”函式。總體思路是建立一個新的內聯模板,並透過指定對舊文件值的路徑引用來填充來自舊文件的值。
例如
(: read in a document in the old format :)
let $old-format := doc('old-file.xml')/root
(: create a new template in the new format that you want to use :)
let $template :=
<new-format>
<new-element>{$old-format/path-to-old-element/text()}</new-element>
<new-element2>{$old-format/path-to-old-element2/text()}</new-element2>
</new-format>
(: you can comment this out when you are debugging :)
let $store := xmldb:store($new-collection, 'new-file.xml', $template)
return $template
此方法使用一系列“節點過濾器”,這些過濾器對文件的每個節點使用遞迴。如果只進行一些更改,例如重新命名幾個元素、新增幾個元素或插入幾個新屬性,則節點過濾器方法是理想的選擇。
以下文章介紹了節點過濾器:XQuery/過濾節點
此方法非常適合您有一組規則用於將每個元素轉換為一個或多個其他元素的情況。它有點複雜,因為每個元素都可以有自己的轉換規則。對於具有一致但巢狀結構的大型文件,它是最通用的,並且最類似於任何在 XSLT 轉換中使用模板匹配規則的人。
如果您有現有的 XSLT 轉換,您也可以在您的轉換系統中使用它。XSLT 的問題是它不使用 eXist 索引系統,並且對大型文件的轉換速度可能非常慢。XSLT 程式還必須仔細設定才能包含正確的匯入語句,這在 XML 資料庫中可能會變得非常複雜。此外,很少有支援擴充套件(如數學函式)的開源 XSLT 2.0 軟體系統。
如果您有很多轉換,您可以使用方法組合。大型系統通常使用基本的型別轉換庫,然後使用過濾器新增自定義。