XSL Transformations

XSL Transformations

This is a really good resource for xsl transformations. One of the useful things to me is the section about using xsl:element and xsl:attribute when transforming from xml to xml.

http://www.ibiblio.org/xml/books/bible2/chapters/ch17.html#d1e6328

I had an interesting case where I needed to transform an “extensible” database model into a more usable xml structure.

This is the original output of a SQL Server stored proc using For Xml Auto:

<root>
<transaction transactionid=”1″>
<vendor vendordescription=”DU”>
<status statusdescription=”Created”>
<transactionattribute attributeid=”1″ attributekey=”TestAttribute1″
attributevalue=”TestValue1″ attributedatatype=”String”>
<transactionattribute attributeid=”2″ attributekey=”TestAttribute2″
attributevalue=”TestValue2″ attributedatatype=”String”>
</transactionattribute>
</transactionattribute>
</status>
</vendor>
</transaction>
</root>

I needed the output to be in a format somewhat like this:

<transactions>
<transaction>
<transactionid>1</transactionid>
<vendorname>DU</vendorname>
<status>Created</status>
<testattribute1>TestValue1</testattribute1>
<testattribute2>TestValue2</testattribute2>
</transaction>
</transactions>

So, to accomplish this I created this xsl transformation script:

<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”&gt;
<xsl:output method=”xml” indent=”yes” omit-xml-declaration=”no” />
<xsl:template match=”/”>
<Transactions>
<Transaction>
<xsl:element name=”TransactionID”>
<xsl:value-of select=”//Transaction/@TransactionID” />
</xsl:element>
<xsl:element name=”VendorName”>
<xsl:value-of select=”//Vendor/@VendorDescription” />
</xsl:element>
<xsl:element name=”Status”>
<xsl:value-of select=”//Status/@StatusDescription” />
</xsl:element>
<xsl:for-each select=”//TransactionAttribute”>
<xsl:element name=”{@AttributeKey}”>
<xsl:value-of select=”@AttributeValue” />
</xsl:element>
</xsl:for-each>
</Transaction>
</Transactions>
</xsl:template>
</xsl:stylesheet>

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s