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>
Friday, June 10, 2005
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment