在XML到XML转换期间替换Dataweave中的字符串

时间:2016-02-01 07:44:08

标签: mule esb dataweave

我的输入XMl是

<?xml version="1.0" encoding="UTF-8"?>
<DEBMAS01>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
  <TABNAM>EDI_DC40</TABNAM>
  <DIRECT>2</DIRECT>
  <IDOCTYP>DEBMAS01</IDOCTYP>
  <MESTYP>DEBMAS</MESTYP>
  <SNDPOR>MULESOFT</SNDPOR>
  <SNDPRT>LS</SNDPRT>
  <SNDPRN>MULESOFT</SNDPRN>
  <RCVPOR>MULESOFT</RCVPOR>
  <RCVPRT>LS</RCVPRT>
  <RCVPRN>MULESOFT</RCVPRN>
</EDI_DC40>
<E1KNA1M SEGMENT="1">
  <MSGFN>005</MSGFN>
  <KUNNR>0000099500</KUNNR>
  <KTOKD>ZAG2</KTOKD>
  <LAND1>SK</LAND1>
  <NAME1>Mulesoft 99003 2nd</NAME1>
  <SPRAS>E</SPRAS>
  <SPRAS_ISO>EN</SPRAS_ISO>
</E1KNA1M>

我的预期输出XML是

<?xml version="1.0" encoding="UTF-8"?>
<DEBMAS01>
<IDOC BEGIN="1">
<EDI_DC40 SEGMENT="1">
  <TABNAM>EDI_DC40</TABNAM>
  <DIRECT>2</DIRECT>
  <IDOCTYP>DEBMAS01</IDOCTYP>
  <MESTYP>DEBMAS</MESTYP>
  <SNDPOR>PROJECT1</SNDPOR>
  <SNDPRT>LS</SNDPRT>
  <SNDPRN>MULESOFT</SNDPRN>
  <RCVPOR>MULESOFT</RCVPOR>
  <RCVPRT>LS</RCVPRT>
  <RCVPRN>MULESOFT</RCVPRN>
</EDI_DC40>
<E1KNA1M SEGMENT="1">
  <MSGFN>005</MSGFN>
  <KUNNR>0000099500</KUNNR>
  <KTOKD>ZAG2</KTOKD>
  <LAND1>SK</LAND1>
  <NAME1>Mulesoft 99003 2nd</NAME1>
  <SPRAS>E</SPRAS>
  <SPRAS_ISO>EN</SPRAS_ISO>
</E1KNA1M>

这里我只想将SNDPOR标签中的字符串从“MULESOFT”替换为“PROJECT1”。我使用XSLT实现了这一点。但现在我想使用Dataweave脚本实现这一目标。请帮助。

1 个答案:

答案 0 :(得分:0)

完成文档后找到解决方案。感谢Rocco对我有所启发。 解决方案是

%dw 1.0
%output application/xml
--- 
DEBMAS01 :{(payload map {
IDOC @(BEGIN:payload.DEBMAS01.IDOC.@BEGIN):{
    EDI_DC40 @(SEGMENT:payload.DEBMAS01.IDOC.EDI_DC40.@SEGMENT):payload.DEBMAS01.IDOC.EDI_DC40 mapObject {
    "$$" : $ unless "$$" ~="SNDPOR" otherwise "PROJECT1"
    },
    E1KNA1M @(SEGMENT:payload.DEBMAS01.IDOC.E1KNA1M.@SEGMENT):payload.DEBMAS01.IDOC.E1KNA1M mapObject {
        "$$": $
    }
}
})
}