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 节点的值。
- DTOStep的属性值每次从500开始自动递增。
我怀疑您正试图将每个 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>
就我而言,我有一个 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 节点的值。
- DTOStep的属性值每次从500开始自动递增。
我怀疑您正试图将每个 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>