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
相关产品推荐
相关产品推荐

