Skip to main content

#EXPORTXML

#EXPORTXML( symbol, data );

symbolThe name of a template variable that has not been previously declared.
dataThe name of a field, RECORD structure, or dataset.

The #EXPORTXML statement produces the same XML as #EXPORT from the specified data and places it in the symbol, then does a LOADXML(symbol, 'label') on the data.

Example:

  NamesRecord := RECORD
    STRING10 first;
    STRING20 last;
  END;
  
  r := RECORD
    UNSIGNED4 dg_parentid;
    STRING10 dg_firstname;
    STRING dg_lastname;
    UNSIGNED1 dg_prange;
    IFBLOCK(SELF.dg_prange % 2 = 0)
      STRING20 extrafield;
    END;
    NamesRecord namerec;
    DATASET(NamesRecord) childNames;
  END;
  
  ds := DATASET('~RTTEST::OUT::ds', r, THOR);
  
  //This example produces the same result as the example for #EXPORT.
  //Notice the lack of #DECLARE and LOADXML in this version:
  #EXPORTXML(Fred,r);
  
  #FOR (Fred)
   #FOR (Field) 
    #IF (%'{@isEnd}'% <> '')
  OUTPUT('END');
    #ELSE
  OUTPUT(%'{@type}'%
     #IF (%'{@size}'% <> '-15' AND
          %'{@isRecord}'%='' AND
          %'{@isDataset}'%='')
  + %'{@size}'%
     #END
  + ' ' + %'{@label}'% + ';');
    #END
   #END
  #END
  OUTPUT('Done');
  //**********************************************************
  //These examples show some other possible uses of #EXPORTXML:
  
  //This could be greatly simplified as
  // (%'{IsAStringMetaInfo/Field[1]/@type}'%='string')
  isAString(inputField) := MACRO
  #EXPORTXML(IsAStringMetaInfo, inputField);
  #IF (%'IsAString'%='')
   #DECLARE(IsAString);
  #END;
  #SET(IsAString, false);
  #FOR (IsAStringMetaInfo)
   #FOR (Field)
    #IF (%'{@type}'% = 'string')
     #SET (IsAString, true);
    #END
    #BREAK
   #END
  #END
  %IsAString%
  ENDMACRO;
  
  getFieldName(inputField) := MACRO
    #EXPORTXML(GetFieldNameMetaInfo, inputField);
    %'{GetFieldNameMetaInfo/Field[1]/@name}'%
  ENDMACRO;
  displayIsAString(inputField) := MACRO
    OUTPUT(getFieldName(inputField)
        + TRIM(IF(isAString(inputField), ' is', ' is not'))
        + ' a string.')
  ENDMACRO;
  
  SIZEOF(r.dg_firstname);
  isAString(r.dg_firstname);
  getFieldName(r.dg_firstname);
  OUTPUT('ds.dg_firstname isAString? '
        + (STRING)isAString(ds.dg_firstname));
  isAString(ds.namerec);
  
  displayIsAString(ds.namerec);
  displayIsAString(r.dg_firstname);

See Also: LOADXML, #EXPORT