XML解析算子

  • 文檔創建者:Roxy
  • 編輯次數:25
  • 最近更新:Nikozhan 于 2025-10-11
  • 1. 概述

    1.1 版本

    FineDataLink 版本功能變動
    4.0.9

    新增「XML解析」算子,可以將輸入 XML 資料解析為行列形式的資料

    4.2.5.4

    「XML解析」算子設定項中:

    1)去掉命名空間設定項,該設定項說明請參見歷史版本文檔

    2)XML 語句中支援包含一些不合法字元

    3)支援自動獲取 XML 檔案的命名空間前綴命名空間URL

    4)支援解析非末端節點

    5)可批量去除解析後欄位名稱中的空間前綴

    6)解決多層拆塊問題

    7)若已選擇節點,再次選擇 XML 節點時,新選擇的節點按彈窗中的順序在原本已有欄位的下方新增,如果彈窗中取消選擇了已有節點,從原本已有節點中刪除;4.2.5.4 之前版本再次選擇 XML 節點是整體改寫邏輯,影響使用者體驗

    4.2.10.1
    • 原「解析配置」改名為「XML解析

    • 原「解析後保留所有匯出欄位」改名為「保留上游匯出欄位」,且支援自訂勾選需要保留的上游匯出欄位

    • 支援配置匯出欄位類型


    1.2 應用場景

    對於 API、WebService、OData API中回應資料傳回的 XML 格式資料、來自 XML 檔案的資料,使用者想要將其解析為行列格式資料,以供後續加工儲存。

    1.3 功能簡介

    FineDataLink 支援在「資料轉換」中使用「XML解析」算子將 XML 格式資料解析為行列格式資料,以供後續加工儲存。

    1.4 相容說明

    4.2.5.4 之前版本,非同一層級下的節點同時被選中解析時,會各自生成解析結果,未解析到的欄位補 NULL,結果做「UNION」。如下圖所示:

    情況一:

    使用者使用多個 XML 解析分層解析資料,並透過其他算子進行連結,若升級到 4.2.5.4 及之後版本,不會產生相容性問題。

    情況二:

    使用一個 XML 解析算子解析後,透過不同的篩選把資料分成兩部分,或者使用 SparkSQL 實現其他操作,若升級到 4.2.5.4 及之後版本,會產生相容性問題,需要調整任務。

    2. 功能說明

    「XML解析」算子配置介面如下圖所示:


    2.1 選擇源欄位

    1)下拉列表內容為所有前置欄位名。

    2)上游節點為 API 輸入且資料未展開為二維表時:

    • 4.2.5.4 之前版本,源欄位預設為 default。

    • 4.2.5.4 及之後版本,源欄位預設為 responseBody。

    3)4.2.5.4 及之後版本,XML 語句中包含下面所示字元能正常解析不報錯;

    \u0000-\u0008: ASCII 碼 0-8,包括:NUL(空字元)、SOH(標題開始)、STX(正文開始)、ETX(正文結束)、EOT(傳輸結束)、ENQ(請求)、ACK(確認)、BEL(響鈴)、BS(倒退)
    \u000B: ASCII碼11,即 VT(垂直列表符)
    \u000C: ASCII碼12,即 FF(換頁符)
    \u000E-\u001F: ASCII碼 14-31

    4)4.2.10.1 及之後版本,原「解析後保留所有匯出欄位」改名為「保留上游匯出欄位」,且支援自訂勾選需要保留的上游匯出欄位。

    • 未勾選該按鈕:只保留所選源欄位解析後的資料;

    • 勾選該按鈕:保留上游所有的源欄位+所選源欄位解析後的資料;

    • 勾選該按鈕並設定「選部分」欄位:保留所選源欄位+所選源欄位解析後的資料;

    2.2.1 4.2.5.4 之前版本

    詳情請參見:歷史版本

    2.2.2 4.2.5.4 及之後版本

    前提條件
    說明
    選擇源欄位後&&XML 檔案格式正確&&XML 檔案中有命名空間自動獲取 XML 檔案的命名空間前綴命名空間URL
    選擇源欄位後&&XML 檔案格式正確&&XML 檔案中無命名空間提示沒有命名空間

    命名空間前綴命名空間URL」說明如下表所示:

    欄位名
    說明
    命名空間前綴

    1)支援修改、重新獲取(4.2.5.4 及之後版本支援;點選後,先清空已有內容,再重新獲取)、新增和刪除操作;修改時,需注意:命名空間前綴將影響相關XML節點的XPath路徑,請謹慎修

    2)若獲取到的命名空間無前綴,則給預設值default、default1、default2......進行命名

    3)不允許重名,不能為空

    命名空間URL

    1)支援修改、重新獲取4.2.5.4 及之後版本支援;點選後,先清空已有內容,再重新獲取新增和刪除操作

    2)允許重複


    2.3 解析 XML 資料

    2.3.1 選擇 XML 節點

    點選「選擇XML節點」按鈕後,彈出XML節點選擇框。

    陣列節點說明:同一層級的多個標籤,因同名而被聚合成一個節點,解析後會有多行資料。

    包含陣列的XML範例資料:

    4.2.5.4 之前版本:

    只能選擇末端節點,非末端節點不能選中。詳細說明請參見:歷史版本

    4.2.5.4 及之後版本:

    場景
    說明
    選擇節點

    1)支援選擇非末端節點和末端節點(末端節點定義:沒有子節點;下圖黃色欄位為末端節點,剩下的欄位為非末端節點

    1745473846893780.png

    2)選中非末端節點後,對應欄位以字串形式取節點內部 XML

    範例:選 xml 節點時選擇 friendlist 生成的 XPath 需要是紅框部分的路徑,欄位對應值為紅框部分的字串形式

    1745475166479259.png

    3)支援同時選中:

    • 有從屬關係的節點:例如下圖中的 friendlist 和 name

    • 同一陣列下的同層級節點:例如下圖中的 name、city、ge

    不支援同時選中:

    已選某陣列節點或其子節點,則不能選擇其他陣列或其他子節點

    選擇的不是同一層的 XML 節點時

    資料預覽和實際運作時,對資料進行拼行處

    場景
    範例效果
    匯出欄位中的多個節點,均為同級同父節點時31.png32.png
    匯出欄位中的多個節點,為同一個父節點下的子節點以及父節點的屬性33.png

    父節點的屬性視作為該父節點的一個子節點,和其他子節點同級處

    34.png

    對於匯出欄位中的多個節點,包含不同級節點時31.png

    進行拼行處理,如果有1對n的資料,按照n的部分擴展行;如果有1:N1:N2的資料,按N2的部分擴展N1再擴展1

    36.png

    注1:如果把bstfri中的name和city選中直接在上面加兩列,這兩列的三行每行都是judy sh

    注2:如果解析的XPath路徑中有非末端節點(比方說bstfri節點),擴展成三行,每行值相同,對應欄位以字串形式取節點內部XML(包含當前節點本身,否則XML格式可能不合法)

    注3:父節點的屬性節點在該種情形下同樣視作父節點的子節點,然後根據子節點邏輯進行處理


    「解析後欄位名稱」已存在,再次點選「選擇XML節點」按鈕時
    新選擇的節點按彈窗中的順序在原本已有欄位的下方新增,如果彈窗中取消選擇了已有節點,從原本已有節點中刪除

    2.3.2 匯出欄位

    列表項允許新增,允許刪除。

    列表項允許新增、刪除、清空(4.2.5.4 及之後版本)。

    經過 XML 解析產生的欄位類型統一為字串(從上游帶來的欄位類型不變)。

    欄位名
    說明
    解析後欄位名稱可編輯;配置解析後的欄位名稱

    注1:欄位名稱不允許重名

    注2:不允許引用參數

    點選1745474558335260.png按鈕,可去除欄位名的命名空間前綴。如下圖所示:

    29.png

    去除邏輯:

    1)識別命名空間前綴(前綴必須在命名空間宣告裏出現)

    2)如果清除命名空間前綴會導致欄位名重複,則保留原本的前綴不去除

    XPath 路徑1)可編輯;展示&配置解析後欄位的 XPath 路徑運算式

    2)不允許引用參數

    3)若需解析「選擇XML節點」無法生成的路徑,可點選新增欄位按鈕並手動填寫 XPath 路徑

    類型

    4.2.10.1 及之後版本,支援配置欄位類型,將以指定的欄位類型讀取資料,可選類型為:varchar、int、long、float、double、timestamp、boolean、date

    手寫 XPath 支援的類型:「選取節點」類和「謂語」類

    例如 XML 文檔如下:

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <bookstore>

    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>

    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>

    </bookstore>

    選取節點

    XPath 使用路徑運算式在 XML 文檔中選取節點。節點是透過沿着路徑或者 step 來選取的。

    在下面的表格中,我們已列出了一些路徑運算式以及運算式的結果:

    路徑運算式結果
    bookstore選取 bookstore 元素的所有子節點。
    /bookstore

    選取根元素 bookstore。

    注:假如路徑起始於正斜槓( / ),則此路徑始終代表到某元素的絕對路徑。

    bookstore/book選取屬於 bookstore 的子元素的所有 book 元素。
    //book選取所有 book 子元素,而不管它們在文檔中的位置。
    bookstore//book選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置。
    //@lang選取名為 lang 的所有屬性。

    謂語

    謂語用來尋找某個特定的節點或者包含某個指定的值的節點。

    謂語被嵌在方括號中。

    在下面的表格中,我們列出了帶有謂語的一些路徑運算式,以及運算式的結果:

    路徑運算式結果
    /bookstore/book[1]選取屬於 bookstore 子元素的第一個 book 元素
    /bookstore/book[last()]選取屬於 bookstore 子元素的最後一個 book 元素
    /bookstore/book[last()-1]選取屬於 bookstore 子元素的倒數第二個 book 元素
    /bookstore/book[position()<3]選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素
    //title[@lang]選取所有擁有名為 lang 的屬性的 title 元素
    //title[@lang='eng']選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性
    /bookstore/book[price>35.00]選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00
    /bookstore/book[price>35.00]/title選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00

    3. 特殊場景處理策略

    場景
    處理策略

    源XML資料存在多個根元素,舉例:

    1685427389170899.png

    點選「選擇XML節點」時報錯:XML資料根節點缺失

    自行寫XPath,預覽及運作時報錯:XML資料根節點缺失

    配置的XPath不正確解析出的欄位內容為空

    配置的XPath非法

    或者

    命名空間前綴中填寫了非英文字母的字元

    丟擲解析異常

    命名空間前綴重複

    9.png

    命名空間前綴不可重複

    此例中,將兩個 s 中的一個重新命名為其他名稱,並正常填寫對應 URI ,透過樹選的形式可正常解析

    如果是手填路徑,需要按照重新命名後的命名空間前綴書寫路徑

    源XML資料不完整,舉例:

    1685427733248711.png

    點選選擇XML節點時報錯:XML資料格式不完整

    自行寫XPath,預覽及運作時報錯:XML資料格式不完整

    4. 範例

    「XML解析」算子使用範例請參見:XML解析範例


    附件列表


    主題: 資料開發-定時任務
    • 有幫助
    • 沒幫助
    • 只是瀏覽
    • 评价文档,奖励 1 ~ 100 随机 F 豆!