【问题标题】:XML to POJO dataweave transformationXML 到 POJO 数据编织转换
【发布时间】:2016-09-06 09:01:24
【问题描述】:

我的输入 XML 文件结构如下,我需要列出所有记录中的所有行项目。使用下面的代码,我只获得一条记录的行项目。
DWL:

%dw 1.0
%output application/java
---
payload.purchaseOrders.purchaseOrder.purchaseOrderLines.*purchaseOrderLine map ((podetail) -> {
ORIG_SYSTEM_REV_NUM:payload.purchaseOrders.purchaseOrder.revisionNumber,
ORIG_SYSTEM_STATUS: podetail.status,
ORIG_SYSTEM_LINE_REV_NUMBER:podetail.revisionNumber,
LINE_TYPE:podetail.lineType,
SKU_NUMBER:podetail.SkuNumber,
LANDING_TXN_STATUS:"NEW",
QUANTITY:podetail.quantity,
UNIT_COST:podetail.unitCost,
UOM:"EACH",
NEED_BY_DATE:podetail.needByDate,
START_SHIP_DATE:podetail.startShipDate,
PROMISE_DATE:podetail.dueDate,
CREATION_DATE: podetail.createdDate replace "T" with "" replace   /(\.\d{1,3}Z)/ with "" as :string {format:'yyyy-MM-dd HH:mm:ss'},
CREATED_BY:null,
LAST_UPDATE_DATE: podetail.updatedDate replace "T" with "" replace /(\.\d{1,3}Z)/ with "" as :string {format:'yyyy-MM-dd HH:mm:ss'} when  podetail.updatedDate != "" otherwise null,
LAST_UPDATED_BY:null,
LINE_CREATION_STATUS:null,
ATTRIBUTE1:null,
ATTRIBUTE2:null,
ATTRIBUTE3:null,
ATTRIBUTE4:null,
ATTRIBUTE5:null,
ATTRIBUTE6:null,
ATTRIBUTE7:null,
ATTRIBUTE8:null,
ATTRIBUTE9:null,
ATTRIBUTE10:null,
ATTRIBUTE11:null,
ORIG_SYSTEM_PO_NUMBER: payload.purchaseOrders.purchaseOrder.poNumber,
INVENTORY_ITEM_ID:null,
ORIG_SYSTEM_LINE_NUMBER:podetail.lineNumber
})`

            Sample xml :
            ------------
          <purchaseOrders>
         <purchaseOrder>
         <poNumber>1</poNumber>
         <createdDate>2016-05-17T21:00:00-08:00</createdDate>
         <updatedDate>2016-07-22T05:14:12-08:00</updatedDate>
         <revisionNumber>1</revisionNumber>
         <purchaseOrderLines>
          <purchaseOrderLine>
            <lineNumber>1</lineNumber>
            <lineType>New</lineType>
            <SkuNumber>100000208688</SkuNumber>
            <status>Accepted</status>
            <quantity>4</quantity>
            <unitCost>85</unitCost>
            <uom>ea</uom>
            <needByDate>2016-12-12</needByDate>
            <startShipDate>2016-11-20</startShipDate>
            <dueDate>2016-11-30</dueDate>
            <createdDate>2016-07-22T05:14:10-08:00</createdDate>
            <updatedDate>2016-07-22T05:14:12-08:00</updatedDate>
            <revisionNumber>1</revisionNumber>
          </purchaseOrderLine>
          </purchaseOrderLines>
          </purchaseOrder>
          <purchaseOrder>
         <poNumber>2</poNumber>
             <revisionNumber>1</revisionNumber>
        <purchaseOrderLines>
         <purchaseOrderLine>
            <lineNumber>1</lineNumber>
            <lineType>Stnd Sample</lineType>
            <SkuNumber>100000220975</SkuNumber>
            <status>Accepted</status>
            <quantity>1</quantity>
            <unitCost>40</unitCost>
            <uom>ea</uom>
            <needByDate>2016-11-28</needByDate>
            <startShipDate>2016-11-11</startShipDate>
            <dueDate>2016-11-18</dueDate>
            <createdDate>2016-07-22T05:47:23-08:00</createdDate>
            <updatedDate>2016-07-22T05:47:24-08:00</updatedDate>
            <revisionNumber>1</revisionNumber>
           </purchaseOrderLine>
          </purchaseOrderLines>
          </purchaseOrder>
          <purchaseOrders>

如果有人有这个想法,请帮助我。

【问题讨论】:

    标签: dataweave


    【解决方案1】:

    在示例 xml 数据中,purchaseOrderpurchaseOrders 内的重复元素,而在 dataweave 代码中它被视为 single 元素,在 purchaseOrder 元素之前添加 * 以获取所有元素在输入内部,例如

    payload.purchaseOrders.*purchaseOrder.purchaseOrderLines.*purchaseOrderLine map ((podetail) -&gt; {

    【讨论】:

    • 我已经尝试过了,但它并没有对所有订单项重复。
    • 它使用相同的输入和dataweave 代码,请查看此链接i.stack.imgur.com/wxW4t.jpg
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多