George V. Reilly

Throwing from XSLT

I needed to add some de­clar­a­tive error checking to some XSLT templates recently. Specif­i­cal­ly, I wanted to throw an error if my selects yielded an empty string, indicating that the input XML was wrong.

Un­for­tu­nate­ly, there seems to be no easy way of doing this in XSLT, nor in XslTrans­form. The approved way is to validate against an XSD schema, but for various reasons, I didn’t want to go to the hassle of creating one.

I found a partial solution using xsl:message with the terminate="yes" attribute. Under XslTrans­form.Transform() the following code throws an exception if the XPath expression is empty.

<xsl:if test="not(/some/xpath/expression)">
    <xsl:message terminate="yes">Missing expression</xsl:message>
<xsl:value-of select="/some/xpath/expression" />

It doesn’t do anything, however, in XMLSpy.

The downside, of course, is that you have to maintain the expression in two places, and the template becomes littered with those annoying tests.

blog comments powered by Disqus
Olympics: Razor-thin Margins » « A Talib at Yale