0

我有一个输入 xml 文件,如下所示,其中有多个 LineError 段

 <LineErrors>
    <LineError>
      <LineErrorType>CARGO REPORT SAC</LineErrorType>
      <LineErrorID>CARGO REPORT SAC</LineErrorID>
      <LineErrorDescription>N/A</LineErrorDescription>
    </LineError>
    <LineError>
      <LineErrorType>CONSOLIDATED STATUS</LineErrorType>
      <LineErrorID>CONSOLIDATED STATUS</LineErrorID>
      <LineErrorDescription>HELD</LineErrorDescription>
    </LineError>
</LineErrors>

现在在 dataweaver 中,我正在生成另一个 xml 文件,如果有任何 LineError 段包含 LineErrorDescription 字段作为值“保留”,则属性将映射到固定值。例如 id = "x" 如果 LineErrors.LineError.LineErrorDescription == "Held"

所以我的问题是我们如何在 dataweaver 中进行迭代和比较。如果您有任何线索,请分享。

4

2 回答 2

3

您可以一起使用过滤器和映射,试试这个 -

%dw 1.0
%output application/xml
---
payload.LineErrors.*LineError filter ($.LineErrorDescription == 'HELD') map {
   id: 'X'
}
于 2016-03-08T16:30:59.613 回答
1

您是否查看过DataWeave 的文档?我建议将其作为起点。文档中的一个示例应该可以帮助您进行以下操作:

使用以下输入:

<users>
  <user>
    <name>Mariano Achaval</name>
    <phone>152235465654</phone>
    <street>Laprida 924</street>
  </user>
  <user>
    <name>Martin Alejandro Cousido</name>
    <phone>15332255555</phone>
    <street>Acassuso 2280</street>
  </user>
</users>

使用以下 DW 脚本 - 注意secondName生成方式:

%dw 1.0
%output application/json
%function words(name) name splitBy " "
---
contacts: payload.users.*user map using (parts =  words($.name)){
  firstName: parts[0],
  (secondName: parts[1]) when (sizeOf parts) > 2,
  lastName: parts[-1],
  email:((lower $.name) replace " " with ".") ++ "@acme.com",
  address: $.street
}

产生以下输出:

{
  "contacts": [
    {
      "firstName": "Mariano",
      "lastName": "Achaval",
      "email": "mariano.achaval@acme.com.ar",
      "address": "Laprida 924"
    },
    {
      "firstName": "Martin",
      "secondName": "Alejandro",
      "lastName": "Cousido",
      "email": "martin.alejandro.cousido@acme.com.ar",
      "address": "Acassuso 2280"
    }
  ]
}

我建议您在上述示例的后面尝试实现您在原始问题中解释的内容,如果您遇到任何问题,请使用您正在使用的 DW 脚本示例提出一个新问题以联系寻求进一步的建议。这样,您将能够针对更具体的问题,而不是让 SO 为您完成工作。

希望这可以帮助。

于 2016-03-08T10:06:54.307 回答