如何为 apex_data_export 创建的 XML 定义元素和属性

问题描述 投票:0回答:1

我使用 APEX_DATA_EXPORT 创建了一个 XML 输出文件。 它工作正常,但我不明白如何更改(如果可能)属性和元素的结构和名称。

csv 格式的示例输出效果很好:

参考 BIC 国际银行账号 金额 付款日期
AB8473 BICX 123 45 DE 1349134913 999 2022-03-31T00:00:00
ZAB9574 BICX 123 45 DE 1349134913 156 2022-03-31T00:00:00
XY1245 BICX 123 45 DE 1349134913 123 2022-03-31T00:00:00

XML 输出示例

<ROWSET>
  <ROW>
    <Reference>AB8473    </Reference>
    <BIC>BICX 123 45</BIC>
    <IBAN>DE 1349134913</IBAN>
    <Amount>999</Amount>
    <PaymentDate>2022-03-31T00:00:00</PaymentDate>
  </ROW>
  <ROW>
    <Reference>ZAB9574   </Reference>
    <BIC>BICX 123 45</BIC>
    <IBAN>DE 1349134913</IBAN>
    <Amount>156</Amount>
    <PaymentDate>2022-03-31T00:00:00</PaymentDate>
  </ROW>  
</ROWSET>
...

我在 中找不到任何内容 Oracle 参考

如何更改名称 ROWSET / ROW 并添加一些附加属性?

提前致谢, KBK

oracle plsql oracle-apex
1个回答
0
投票

使用带有 XMLTABLE() 函数的 xml 输出,您可以获取表格形式的数据。

WITH    --  S a m p l e    D a t a :      (xml)
    xml_tab (xml_data) AS
      ( Select XMLTYPE(
'<ROWSET>
  <ROW>
    <Reference>AB8473    </Reference>
    <BIC>BICX 123 45</BIC>
    <IBAN>DE 1349134913</IBAN>
    <Amount>999</Amount>
    <PaymentDate>2022-03-31T00:00:00</PaymentDate>
  </ROW>
  <ROW>
    <Reference>ZAB9574   </Reference>
    <BIC>BICX 123 45</BIC>
    <IBAN>DE 1349134913</IBAN>
    <Amount>156</Amount>
    <PaymentDate>2022-03-31T00:00:00</PaymentDate>
  </ROW>  
</ROWSET>')
      From Dual
      ),

...创建 cte 以从 xml 中获取数据行

    tbl AS
      ( Select      xt.REFER, xt.BIC, xt.IBAN, xt.AMT, To_Date( SubStr(xt.PAYDT, 1, 10), 'yyyy-mm-dd' ) "PAYDT"
        From        xml_tab x, 
                    XMLTABLE('/ROWSET/ROW'  
                                PASSING x.xml_data
                                COLUMNS REFER     VARCHAR2(16)  PATH 'Reference', 
                                        BIC       VARCHAR2(16)  PATH 'BIC',
                                        IBAN      VARCHAR2(32)  PATH 'IBAN',
                                        AMT       NUMBER(16, 2) PATH 'Amount',
                                        PAYDT     VARCHAR2(32)  PATH 'PaymentDate'
                             ) xt
      )

测试结果:

Select * From tbl;
/*     R e s u l t :
REFER            BIC              IBAN                                    AMT PAYDT   
---------------- ---------------- -------------------------------- ---------- --------
AB8473           BICX 123 45      DE 1349134913                           999 31.03.22
ZAB9574          BICX 123 45      DE 1349134913                           156 31.03.22    */

...使用上面的数据集创建新的 xml,更改您需要更改的内容并添加您需要添加的内容。 有一组 xml 函数 可以帮助您完成它。
这里,ROWSET 更改为 Transactions,ROW 更改为 Transaction,并且在 TransactionReference (RowNumber) 中添加了一个属性。其他一些标签也被重命名。

SELECT  XMLELEMENT("Transactions",
                      XMLAGG(XMLELEMENT("Transaction",  
                                        XMLELEMENT("TransactionReference", XMLATTRIBUTES(ROWNUM AS "RowNumber"), t.REFER),   
                                        XMLELEMENT("BIC", t.BIC),
                                        XMLELEMENT("IBAN", t.IBAN),
                                        XMLELEMENT("TransactionAmount", t.AMT),
                                        XMLELEMENT("TransactionDate", To_Char(t.PAYDT, 'yyyy-mm-dd') || 'T00:00:00')
                                  )  
                        ) 
                  ) AS "NEW_XML_DATA" 
FROM tbl t;
/*    R e s u l t :   */
<Transactions>
    <Transaction>
        <TransactionReference RowNumber="1">AB8473    </TransactionReference>
        <BIC>BICX 123 45</BIC>
        <IBAN>DE 1349134913</IBAN>
        <TransactionAmount>999</TransactionAmount>
        <TransactionDate>2022-03-31T00:00:00</TransactionDate>
    </Transaction>
    <Transaction>
        <TransactionReference RowNumber="2">ZAB9574   </TransactionReference>
        <BIC>BICX 123 45</BIC>
        <IBAN>DE 1349134913</IBAN>
        <TransactionAmount>156</TransactionAmount>
        <TransactionDate>2022-03-31T00:00:00</TransactionDate>
    </Transaction>
</Transactions>
© www.soinside.com 2019 - 2024. All rights reserved.