XML Passthrough (Debug Stylesheet)
Use this "pass-through" XSLT stylesheet to output raw XML unchanged in email alerts. Perfect for debugging when you need to see the actual XML structure without HTML transformation.
Why Use a Passthrough Transform?
Nodinite Email Alarm Plugins require a Stylesheet to be configured—you cannot send emails without one. When debugging alarm configurations or troubleshooting data structures, you often need to see the raw XML exactly as the Monitoring Service sends it.
This passthrough stylesheet solves that problem by:
✅ Passing XML through unchanged – Input XML = Output XML
✅ Enabling raw XML in emails – See the actual alarm object structure
✅ Debugging alarm configurations – Verify what data is available
✅ Troubleshooting stylesheet development – Understand the source XML before building complex transformations

Animated walkthrough: on the debug entry Contoso: Raw alarm XML (debug), Configuration > Basic: Override Basic options, Send body as text, Override Stylesheet options, and the passthrough Stylesheet; Save, then Execute Alarm test. The received e-mail holds the alarm object as plain-text XML.
Warning
This stylesheet outputs XML, not HTML. The email body will display as plain XML text, not a formatted HTML layout. This is intentional for debugging purposes.
Configuration Required: On the Email with Options entry's Basic tab, check "Send body as text" to send the email in plain text instead of HTML. This prevents email clients from attempting to parse and render the XML as HTML, which can cause formatting issues.
Data Flow Interaction
The passthrough transform (orange) passes the XML from the Monitoring Service (blue) unchanged to the email output (purple), so developers see the raw alarm object structure.
XSLT Passthrough Transform
Use the following XSLT to output the input XML exactly as received:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Output method: XML with declaration and indentation for readability -->
<xsl:output method="xml"
version="1.0"
encoding="UTF-8"
indent="yes"
omit-xml-declaration="no"/>
<!-- Identity template: Copy everything as-is -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
How It Works
The passthrough transform uses a single template that matches all attributes (@*) and nodes (node()):
<xsl:copy>– Copies the current node exactly as it appears in the source<xsl:apply-templates>– Recursively applies the same template to all child nodes and attributesindent="yes"– Formats the output XML with proper indentation for readabilityomit-xml-declaration="no"– Includes the<?xml version="1.0"?>declaration
This creates a recursive copy of the entire XML tree without any modifications.
Use Cases
Debugging Alarm Object Structure
When developing custom alarm email stylesheets, you need to understand the XML structure available:
Debugging steps (orange) lead to the production Stylesheet (green).
Process
- Set the passthrough stylesheet on a separate debug Email with Options entry, and add that entry to a test Monitor View
- Trigger an alarm, or run the entry's Execute Alarm test
- Receive email with raw XML showing complete Alarm Plugin Object structure
- Use the XML to develop custom XSLT with proper element paths
- Replace with production stylesheet once development is complete
Testing Alarm Plugin Configuration
Verify that Custom Metadata, Resources, Integrations, and other alarm data populate correctly:
Before building complex HTML emails, use the passthrough transform to confirm:
- Custom metadata fields appear in the XML
- Monitor view names and descriptions are correct
- Resource states and status codes match expectations
- Integration and application data is present
Troubleshooting Missing Data
If your production stylesheet shows missing data, use the passthrough transform to determine if:
- The data exists in the source XML (stylesheet XPath issue)
- The data is missing from the alarm object (configuration issue)
Example Output
When using the passthrough transform on an Alarm Plugin Object, the email body contains the raw XML structure. The sample below is shortened: a real alarm object carries more elements (for example the Source, Category, and Application of each Resource), under the same <AlarmObject> root.
<?xml version="1.0" encoding="UTF-8"?>
<AlarmObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MonitorViews>
<MonitorView>
<MonitorViewId>1</MonitorViewId>
<Name>Production Monitoring</Name>
<Description>Critical production systems</Description>
<StatusCode>
<StatusCode>1</StatusCode>
<Name>Warning</Name>
</StatusCode>
<NumberOfMonitoredResources>5</NumberOfMonitoredResources>
<Integrations>
<Integration>
<IntegrationId>42</IntegrationId>
<Name>Order Processing Integration</Name>
<WebSite>https://portal.example.com/integrations/42</WebSite>
<CustomFields>
<CustomField>
<CustomFieldId>1</CustomFieldId>
<Name>SLA Level</Name>
<CustomValues>
<CustomValue>
<Value>Gold</Value>
<Description>24/7 support required</Description>
</CustomValue>
</CustomValues>
</CustomField>
</CustomFields>
</Integration>
</Integrations>
<Resources>
<Resource>
<ResourceId>10</ResourceId>
<Name>Order API - Queue Processor</Name>
<StatusCode>
<StatusCode>1</StatusCode>
<Name>Warning</Name>
</StatusCode>
</Resource>
</Resources>
</MonitorView>
</MonitorViews>
<Created>2025-11-04T14:30:00.000000Z</Created>
<WebClientUrl>https://monitoring.example.com/</WebClientUrl>
<IsRecurring>false</IsRecurring>
</AlarmObject>
This raw XML shows you:
- Available element paths for XSLT template matching
- Custom metadata structure and values
- Monitor view hierarchy
- Resource naming and status codes
- All data available for transformation
- IsRecurring flag -
trueif alert was resent due to recurrence configuration,falsefor initial alert
Configuration Steps
1. Create the Stylesheet
In Nodinite Web Client, navigate to Administration > Customize > Stylesheets:
- Click Add Stylesheet to create a new stylesheet
- Name: "XML Passthrough (Debug)" or "Raw XML Output"
- Type: Select XSLT
- Stylesheet: Paste the XSLT Passthrough Transform above
- Click Save
2. Set It on a Debug Email with Options Entry
The Stylesheet and Send body as text are set on the Alarm Plugin entry, not on the Monitor View. Keep a separate debug entry, so the production entry isn't touched:
- Navigate to Administration > Settings > Alarm Plugins and open (or add) an Email with Options entry for debugging, such as Contoso: Raw alarm XML (debug)
- Open Configuration > Basic
- Check Override Basic options, then check Send body as text (prevents HTML parsing of XML)
- Check Override Stylesheet options, then choose "XML Passthrough (Debug)"
- Click Save
- On the Monitor View you want to debug, add the debug entry on the External notifications tab. A Monitor View only selects entries; it has no Stylesheet or text option of its own.
3. Trigger Test Alarm
Click Execute Alarm test on the debug entry's Control card, or wait for a real alarm condition:
- The email body will contain raw XML instead of HTML
- Email clients will display the XML as plain text
- Copy the XML to analyze structure or use in stylesheet development
4. Return to Production
Once debugging is complete, remove the debug entry from the Monitor View's External notifications tab. The production entry kept its Stylesheet and HTML body the whole time.
Tip
Best Practice: Keep the passthrough stylesheet saved in Nodinite for future debugging sessions. Name it clearly (e.g., "DEBUG - Raw XML Passthrough") so team members understand its purpose.
Next Steps
Related Topics
Alarm Plugin Object - XML structure and custom XSLT examples
Stylesheet Examples - All XSLT and Liquid examples
Alarm Plugins - Notification channels that use Stylesheets
XML to XML - Transform XML to different XML format
Stylesheets - Manage XSLT and Liquid stylesheets
Monitor Views - Configure alarm notifications
Email with Options - Email notification configuration with plain text option