You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Simple Transformation中如何实现可选XML标签的条件控制?

代码问题说明

  • 条件块内重复定义了<User>标签,多余的<User tt:value-ref=".DEPARTAMENT.DOCUMENTINFO.USER."/>会导致符合条件时生成两个节点,直接删除该行即可。
  • 条件判断的路径语法错误,路径末尾多写了多余的.,ref('.DEPARTAMENT.DOCUMENTINFO.USER.')中的末尾点会导致路径识别失败,需删除。
  • 如果USER是内表类型,判断非空后还需要通过<tt:loop>遍历内表行,否则无法正确生成多节点,同时路径可以用$ref简化写法。

修正后代码

场景1:USER为结构类型

<tt:cond check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER'))">
  <User>
    <tt:attribute name="UserName" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.USERNAME"/>
    <tt:attribute name="RFCUser" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RFCUSER"/>
    <tt:attribute name="Residence" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RESIDENCE"/>
    <Address>
      <tt:attribute name="Street" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.STREET"/>
      <tt:attribute name="Num" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.NUM"/>
      [....]
    </Address>
  </User>
</tt:cond>

场景2:USER为内表类型

<tt:cond check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER'))">
  <tt:loop ref=".DEPARTAMENT.DOCUMENTINFO.USER">
    <User>
      <tt:attribute name="UserName" value-ref="$ref.USERNAME"/>
      <tt:attribute name="RFCUser" value-ref="$ref.RFCUSER"/>
      <tt:attribute name="Residence" value-ref="$ref.RESIDENCE"/>
      <Address>
        <tt:attribute name="Street" value-ref="$ref.ADDRESS.STREET"/>
        <tt:attribute name="Num" value-ref="$ref.ADDRESS.NUM"/>
        [....]
      </Address>
    </User>
  </tt:loop>
</tt:cond>

补充说明

not-initial本身支持直接判断内表是否为空、结构是否为初始值。如果你仅需要判断USER下某个关键字段非空就展示标签,可以把判断条件替换为对应字段的路径,比如check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER.USERNAME'))"。

内容的提问来源于stack exchange,提问作者Antonio Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:39:04