Introducing components to match on various forms of value seems odd. Ideally standardise on those names; but if that's not possible (and you're using microservices), why not have a service to correct the name, rather than a library deployed to every endpoint? Then you call that service with data containing `first_name` or `givenname` and it returns that message with the standardised form. Or have a "global key" service; where you send the source system name and value, and have that translated for the destination via a lookup, allowing any field names or defined values to be translated by a generic reusable component:
Entity | System Name | System Value | GlobalKey
-------------------------------------------------------------------------------------------
Boolean | HR | TRUE | 52582622-4322-445b-bb7a-8ca118d0ca2b
Boolean | HR | FALSE | 688c2298-6b99-4c31-a356-1ab9b1caacde
Boolean | Finance | 1 | 52582622-4322-445b-bb7a-8ca118d0ca2b
Boolean | Finance | 0 | 688c2298-6b99-4c31-a356-1ab9b1caacde
Boolean | Sales | Yes | 52582622-4322-445b-bb7a-8ca118d0ca2b
Boolean | Sales | No | 688c2298-6b99-4c31-a356-1ab9b1caacde
FieldName | HR | GivenName | 3de31cff-e4bb-4d4a-a819-fd96c7c5032e
FieldName | HR | Surname | e799b891-1eeb-4598-85a5-a9534d3a3a4c
FieldName | Finance | First_Name | 3de31cff-e4bb-4d4a-a819-fd96c7c5032e
FieldName | Finance | Last_Name | e799b891-1eeb-4598-85a5-a9534d3a3a4c
FieldName | Sales | FirstName | 3de31cff-e4bb-4d4a-a819-fd96c7c5032e
FieldName | Sales | Surname | e799b891-1eeb-4598-85a5-a9534d3a3a4c
As for "handcrafted XML"... the alternative looks like handcrafted code... For translation a language like XSLT which was designed for translating data from one format to another seems like a good choice. You can also use this to get around your translation issue by defining a central "universal" format; so you can have XSLTs to translate messages from source systems to the universal format, then other XSLTs to translate from universal to the destination; so that adding or removing a system (/service) only impacts that system / you don't need to rewrite every point-to-point interaction of that service with another (OK, not point to point since we have microservices; but if they're not adding value by abstracting you away from point to point then essentially you've just got complex point-to-point interactions rather than simple point-to-point).