XSLT maps as a built-in action
Compose using XSLT transforms XML with an XSLT 1.0 stylesheet inside a Logic Apps Standard workflow. It is a built-in (service provider) connector, installed as a NuGet package, so it runs in the Logic App itself: no integration account and no extra Azure resources.
It is made for the maps that real integrations already have, many of them from BizTalk Server: XSLT 1.0 with imported modules, msxsl:script C# helpers, and lookups against other systems.
| Compose using XSLT | Logic Apps Transform XML (built-in) | |
|---|---|---|
| Maps | Deployed (Artifacts/Maps) or inline in the workflow | Deployed maps or an integration account |
| Include and import | Relative modules inside the map folder, with XSLT 1.0 import precedence | Not for deployed map files |
| Embedded C# | msxsl:script, compiled with Roslyn (a documented C# subset) | Not in Standard (inline scripts need .NET Framework assemblies) |
| Lookups | az:InvokeText calls an Azure Function, by alias, from XPath | No |
| Isolation | A supervised worker process per transformation, killed at the deadline | In the Logic Apps host |
| Output | xml, html or text, always UTF-8, with timings and cache diagnostics | xml, html or text |
How it runs
- Supervised workers. Transformations run in a small pool of worker processes. When the action's deadline passes, the worker is killed and replaced: a runaway script or a deep recursion cannot hang the Logic App.
- Compiled once. Each worker caches compiled maps (C# included) by content hash, so later runs take about a millisecond plus the transformation itself.
- Safe by default.
document(), DTDs, network and file access outside the map folder are refused; Function endpoints come only from an operator-owned registry; errors never contain payload data.
XSLT 1.0
The engine is .NET's XslCompiledTransform. XSLT 2.0 and 3.0 stylesheets are rejected with UnsupportedXsltVersion.