How to print empty string as a result from xml node creation using oracle in a procedure
You use REPLACE in your code, with 1 more REPLACE:

SELECT REPLACE(XMLElement("TableData", 
          XMLAGG(XMLElement("rt",XMLAttributes(1 as file_data_type, '' as Author))) 
       ).getStringVal(),'&gt;&lt;/rt&gt;','/&gt;')
  as xml
FROM dual;

XML
--------------------------------------------------------------------------------
&lt;TableData&gt;&lt;rt FILE_DATA_TYPE="1"/&gt;&lt;/TableData&gt;



SELECT REPLACE(XMLElement("TableData", 
          XMLAGG(XMLElement("rt",XMLAttributes(1 as file_data_type, 'dummy' as Author))) 
       ).getStringVal(),'&gt;&lt;/rt&gt;','/&gt;')
  as xml
FROM dual;

XML
--------------------------------------------------------------------------------
&lt;TableData&gt;&lt;rt FILE_DATA_TYPE="1" AUTHOR="dummy"/&gt;&lt;/TableData&gt;



SELECT REPLACE(REPLACE(XMLElement("TableData", 
          XMLAGG(XMLElement("rt",XMLAttributes(1 as file_data_type, 'dummy' as Author))) 
        ).getStringVal(),'&gt;&lt;/rt&gt;','/&gt;'), 'dummy')
  as xml
FROM dual;

XML
--------------------------------------------------------------------------------
&lt;TableData&gt;&lt;rt FILE_DATA_TYPE="1" AUTHOR=""/&gt;&lt;/TableData&gt;