在 Dataweave 2.0 中选择第一个 DTOSteps 时如何停止迭代?

How to stop the iteration when the first DTOSteps are selected in Dataweave 2.0?

在我的例子中,我正在尝试更新 @CoverageCd == "TRIA" 的 DTOSteps(第一个子节点)值。

但是我的数据编织代码更新了@CoverageCd == "TRIA" 的所有 DTOStep。假设这段代码中的变量returns一些值。

我的 Dataweave 代码:

%dw 2.0
var multiChar = "X"
output application/xml

fun TRIAtransformSteps(x, index)=
    x  match {
      case is Object -> x mapObject 
        if  ($$ as String == "DTOSteps")
        {
                    DTOSteps: TRIAtransformNewSteps() 
        }
        else 
            (($$): TRIAtransformSteps($, index+1)) 
      else -> $
}
    
fun TRIAtransformNewSteps()=
    {
        DTOStep @(Order:vars.Desc[0], Name:"Rate Area: "++ vars.Desc ++ " TRIA",Desc:vars.Desc ++ " TRIA Layer Premium", Operation:"+", Factor: vars.drcvalues.TRIACharge , Value:vars.drcvalues.TRIACharge ): null
    }
    
fun TRIAtransformCoverage(x, index)=
    x match {
      case is Object -> x mapObject 
        if ($$ as String == "DTOCoverage" and $$.@CoverageCd == "TRIA")
            { 
                DTOCoverage @(( $$.@ ) ): TRIAtransformSteps($, index)
            }
        else 
            (($$): TRIAtransformCoverage($, index+1)) 
      else -> $
    }
---
TRIAtransformCoverage(payload,1)

输入负载:https://github.com/Manikandan99/java-code-to-dataweave-2/blob/main/input_xml_request_TRIA.xml

获取输出:https://github.com/Manikandan99/java-code-to-dataweave-2/blob/main/My_output.xml

预期输出:https://github.com/Manikandan99/java-code-to-dataweave-2/blob/main/Expected_output.xml

如何在选择第一个 DTOSteps 时中断迭代?

如果元素是其parent元素的第一个child,那么可以使用mapObject()和filterobject()函数的第三个参数,索引.经常被遗忘的是,它们有三个参数: (value,key,index)。如果没有命名,默认情况下可以引用为 $$$。可以加个条件判断是不是第一个child.

对于这种情况,如果索引是第一个(即 index==0),您可以使用 filterObject() 仅保留所需的键。

条件可以是例如:

x filterObject ($$ as String == "DTOSteps" and $$$ == 0) 
mapObject if ..

请提供所用变量的值。要获得输出,您需要更改 TRIAtransformSteps 函数,如下所示

fun TRIAtransformSteps(x, index)=
    x  match {
      case is Object -> x mapObject 
        if  ($$ as String == "DTOSteps")
        {
            DTOSteps: TRIAtransformNewSteps() 
        }
        else 
            (($$): $)
      else -> $
}