Re: [xsl] Controlling attributes and xsi:type

Subject: Re: [xsl] Controlling attributes and xsi:type
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Tue, 08 Jun 2010 15:15:18 +0200
Nick Leaton wrote:
I'm trying to output some xml from and XSLT 2.0 stylesheet.

The format is outside of my control - third party - and its picky.

The output is as follows.

    <calypso:cashflow xsi:type="calypso:CashflowSimple">
				...
    </calypso:cashflow>
									
Header of the stylesheet is this

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
    xmlns:calypso="http://www.calypso.com/xml";
    version="2.0"
    exclude-result-prefixes="xs xsl"
    >

xsl to output looks like this

        <xsl:element name="calypso:cashflow">
            <xsl:attribute
                name="xsi:type"
                namespace="http://www.calypso.com/xml";
                select="'calypso:CashflowSimple'"
                />					
                ...
	</xsl:element>							
				
The output produced is this

        <calypso:cashflow xmlns:xsi="http://www.calypso.com/xml";
xsi:type="calypso:CashflowSimple">

The third party app doesn't accept the
xmlns:xsi="http://www.calypso.com/xml"; as an attribute.

How can I supress this attribute for the element?

I would use literal result elements as much as possible e.g.
<calypso:cashflow xsi:type="calypso:CashflowSimple">
is possible in your stylesheet.
Then simply put
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
on your xsl:stylesheet or xsl:transform element and all should work fine.
If you really need to create/compute the attribute with xsl:attribute then use
<xsl:attribute name="xsi:type" namespace="http://www.w3.org/2001/XMLSchema-instance"; select="'calypso:CashflowSimpl'"/>



--


	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

Current Thread