xml 数据编织 2.0 中的转换

xml transform in data weave 2.0

就我而言,我有一个 XML 请求和预期响应负载。但我不知道使用Dataweave 2.0

进行转换

输入XMl:

<?xml version="1.0" encoding="UTF-8"?>
<DTOApplication id="Application-1660258480-1493174910" ApplicationNumber="AP-00006354" Version="3.10">
    <QuestionReplies id="QuestionReplies-1553101003-1178947042">
        <QuestionReply id="QuestionReply-859195405-1832325773" Name="1000" Value="NO" VisibleInd="Yes"/>
        <QuestionReply id="QuestionReply-1656171536-493197768" Name="1000A" VisibleInd="No"/>
    </QuestionReplies>
    <DTORisk id="Risk-156119133-1700981150">
        <DTOCoverage>
            <DTOStep id="Step-Coverage-1713637162-341585712-Premium" Status="Cleared"/>
        </DTOCoverage>
    </DTORisk>
    <DTORisk id="Risk-156119133-1700981151">
        <DTOCoverage>
            <DTOStep id="Step-Coverage-1713637162-341585713-Premium" Status="Cleared"/>
        </DTOCoverage>
    </DTORisk>
    <DTOCoverage>
        <DTOStep id="Step-Coverage-1713637162-341585713-Premium" Status="Cleared"/>
    </DTOCoverage>
    <DTOCoverage>
        <DTOStep id="Step-Coverage-1713637162-341585713-Premium" Status="Cleared"/>
    </DTOCoverage>
    <DTOCoverage>
        <DTOStep id="Step-Coverage-1713637162-341585713-Premium" Status="Cleared"/>
    </DTOCoverage>
</DTOApplication>   

输出XML:

<?xml version="1.0" encoding="UTF-8"?>
<DTOApplication id="Application-1660258480-1493174910" ApplicationNumber="AP-00006354" Version="3.10">
    <QuestionReplies id="QuestionReplies-1553101003-1178947042">
        <QuestionReply id="QuestionReply-859195405-1832325773" Name="1000" Value="NO" VisibleInd="Yes"/>
        <QuestionReply id="QuestionReply-1656171536-493197768" Name="1000A" VisibleInd="No"/>
    </QuestionReplies>
    <DTORisk id="Risk-156119133-1700981150">
        <DTOCoverage>
            <DTOSteps>
                        <DTOStep Order="1" Name="Final Premium" Factor="501" Value="501"/>
                    </DTOSteps>
        </DTOCoverage>
    </DTORisk>
    <DTORisk id="Risk-156119133-1700981151">
        <DTOCoverage>
            <DTOSteps>
                        <DTOStep Order="1" Name="Final Premium" Factor="502" Value="502"/>
                    </DTOSteps>
        </DTOCoverage>
    </DTORisk>
    <DTOCoverage>
        <DTOSteps>
                <DTOStep Order="1" Name="Final Premium" Factor="503" Value="503"/>
            </DTOSteps>
    </DTOCoverage>
    <DTOCoverage>
        <DTOSteps>
                  <DTOStep Order="1" Name="Final Premium" Factor="504" Value="504"/>
            </DTOSteps>
    </DTOCoverage>
    <DTOCoverage>
        <DTOSteps>
                  <DTOStep Order="1" Name="Final Premium" Factor="505" Value="505"/>
            </DTOSteps>
    </DTOCoverage>
</DTOApplication>   

来源:https://github.com/Manikandan99/jenkins-demo-cicd/blob/master/output_xml

注:

我怀疑您正试图将每个 DTOStep 元素包含在一个 DTOSteps 父元素中。这可以使用 update() 运算符来完成。根据需要转换每个子元素 mapObject() 很有用,因为它还提供索引。您可能需要针对其他输入微调脚本。

%dw 2.0
output application/xml
var keys=["DTORisk", "DTOCoverage"]
var startingValue=499
fun createOutputElement(keyName, index)=keyName match {
  case "DTOCoverage" -> { DTOCoverage: DTOSteps: DTOStep @(Order:1, Name:"Final Premiun", Factor: index + startingValue, Value: index + startingValue): null }
  case "DTORisk" -> { DTORisk: DTOCoverage: DTOSteps: DTOStep @(Order:1, Name:"Final Premiun", Factor: index + startingValue, Value: index + startingValue): null }
  else -> dw::Runtime::fail("Unexpected key")
}
---
payload update {
        case risk at .DTOApplication ->
            risk mapObject ((value, key, index) -> 
                if (keys contains key as String ) createOutputElement(key as String, index) 
                else (key):value
            )
}

输出:

<?xml version='1.0' encoding='UTF-8'?>
<DTOApplication id="Application-1660258480-1493174910" ApplicationNumber="AP-00006354" Version="3.10">
  <QuestionReplies id="QuestionReplies-1553101003-1178947042">
    <QuestionReply id="QuestionReply-859195405-1832325773" Name="1000" Value="NO" VisibleInd="Yes"/>
    <QuestionReply id="QuestionReply-1656171536-493197768" Name="1000A" VisibleInd="No"/>
  </QuestionReplies>
  <DTORisk>
    <DTOCoverage>
      <DTOSteps>
        <DTOStep Order="1" Name="Final Premiun" Factor="500" Value="500"/>
      </DTOSteps>
    </DTOCoverage>
  </DTORisk>
  <DTORisk>
    <DTOCoverage>
      <DTOSteps>
        <DTOStep Order="1" Name="Final Premiun" Factor="501" Value="501"/>
      </DTOSteps>
    </DTOCoverage>
  </DTORisk>
  <DTOCoverage>
    <DTOSteps>
      <DTOStep Order="1" Name="Final Premiun" Factor="502" Value="502"/>
    </DTOSteps>
  </DTOCoverage>
  <DTOCoverage>
    <DTOSteps>
      <DTOStep Order="1" Name="Final Premiun" Factor="503" Value="503"/>
    </DTOSteps>
  </DTOCoverage>
  <DTOCoverage>
    <DTOSteps>
      <DTOStep Order="1" Name="Final Premiun" Factor="504" Value="504"/>
    </DTOSteps>
  </DTOCoverage>
</DTOApplication>