简单转换中的可选 XML 标记?

Optional XML Tag in Simple Transformation?

我是使用简单转换的新手,我需要从内部表中获取 XML。有些表没有信息(记录),所以我试图在简单转换中设置条件,我需要做的是隐藏标签 User 及其内部标签和属性,如果表中没有记录并在有记录时显示它,但我做不到...

我希望有人能看到我做错了什么,并指出我是多么愚蠢……这是我尝试过的代码:

<tt:cond check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER.'))">

<User tt:value-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>

你没有给出你的ABAP变量的定义,具体哪里错了,如果你的条件是正确的很难回答。因此,让我提出一个完整的最小可重现示例的答案(根据 Stack Overflow 的建议,请参阅“帮助”菜单)。

如果您有此 ABAP 代码:

TYPES: BEGIN OF ty_user,
         username TYPE string,
       END OF ty_user,
       ty_users TYPE STANDARD TABLE OF ty_user WITH EMPTY KEY.
DATA(users) = VALUE ty_users( ( username = `TOTO` ) ).
CALL TRANSFORMATION ztest SOURCE users = users RESULT XML DATA(xml).

和这个ztest简单转换:

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
  <tt:root name="USERS"/>
  <tt:template>
    <theroot>
      <tt:cond check="not-initial(USERS)">
        <Users>
          <tt:loop ref=".USERS">
            <User>
              <tt:attribute name="UserName" value-ref="USERNAME"/>
            </User>
          </tt:loop>
        </Users>
      </tt:cond>
    </theroot>
  </tt:template>
</tt:transform>

会产生这个 XML:

<?xml version="1.0"?>
​<theroot>
​  <Users>
​    <User UserName="TOTO"/>
​  </Users>
​</theroot>

如果内部 table 为空,则会产生此 XML:

<?xml version="1.0"?>
​<theroot/>

关于哪里出了问题