XML到POJO的数据编织转换

时间:2016-08-05 03:26:05

标签: dataweave

我有如下输入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>

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

1 个答案:

答案 0 :(得分:0)

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

payload.purchaseOrders.*purchaseOrder.purchaseOrderLines.*purchaseOrderLine map ((podetail) -> {