Developing SEPA (ISO 20022) modification in AX 2012 for Lithuanian bank requirements I used AIF SEPA Credit Transfer outbound port as described in https://blogs.msdn.microsoft.com/axsupport/2013/11/25/how-to-setup-sepa-credit-in-ax2012-r2/
All modifications were carried out in AX2012R3RTM_STD_VendPayments_SEPACreditTransfer_03_xsl.xsl
But after first tests I got additional requirements.
1. Use UTF-8 instead of UTF-8-BOM
Wrong:

Desired output:

2. Removing xsi:schemaLocation from root Document tag:

I was unable to achieve these objectives using XSL transformations. So I implemented .NET assembly transforms for meeting those requirements.
Two methods were created:
RemoveUTF8BOMBytes: If UTF-8-BOM is detected remove first BOM bytes converting it to UTF-8
TruncateXsiSchemaLocationAndOutputAsUTF8NoBom truncates xsi:schema attribute and converts to utf-8 (noBom). If TruncateXsiSchemaLocationAndOutputAsUTF8NoBom is used then RemoveUTF8BOMBytes is not needed. But RemoveUTF8BOMBytes is more efficient
AIFTransform.dll can be applied to AIF Outbound port by following this procedure:
Open AIF outbound ports and click outbound transforms:

Click manage transforms

Create new transform

Name it removeBomBytes choose .NET assembly as type and hit load

Browse and selectAIFTransform

Now in the class field you can choose required method RemoveUTF8BOMBytes or TruncateXsiSchemaLocationAndOutputAsUTF8NoBom

After choosing RemoveUTF8BOMBytes close manage transforms form and create new outbound transform line then choose removeBomBytes

Make sure that RemoveUTF8BOMBytes is last outbound transform otherwise another xsl transformations will outputing file as UTF-8-BOM from AIF.

Final result should look like this:

AIFTransform.dll can be downloaded from http://1drv.ms/1PzHs35
AIFOutboundTransform solution:

Archived Visual studio 2013 AIFOutboundTransform solution can be downloaded from AIF Remove UTF-8-BOM bom bits