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”>
<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>
Like this:
Like Loading...