1

我的输入 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 脚本来实现这一点。请帮忙。

4

1 回答 1

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 {
        "$$": $
    }
}
})
}
于 2016-02-01T09:46:45.180 回答