Hi I'm currently trying to use a lookup table for converting one xml
doc to another using a XSLT transformation. Ideally I would like my
first xml doc to be converted to my second xml doc below.
All that I want is to replace node names with a matching value in the
lookup table and place the result into an field attribute pair:
Example: id to be renamed instrument_id thus
<id type="master">asset #132</id> becomes
<field Name="instrument_id" IsUnique="Y">asset #132</field>
My problem is that none of the name matches are being output in the
resulting xml document.
My first XML has an asset request:
<pluginRequest>
<senderRef>store</senderRef>
<full>
<asset type="bondFuture">
<id type="master">asset #132</id>
<Category>Bond Future</Category>
<HiPort>DG Z4</HiPort>
<Bloomberg>G Z4 Index</Bloomberg>
<Expiry>29-Dec-04</Expiry>
</asset>
</full>
</pluginRequest>
My desired output:
<LzMessage RequestReference="1">
<LzCreateInstrumentRequest>
<field name="instrument_id" IsUnique="Y">asset #132</field>
<field name="name" IsUnique="N">Bond Future</field>
...etc
<field name="expiration_date" IsUnique="N">29-Dec-04</field>
</LzCreateInstrumentRequest>
</LzMessage>
My actual result:
<LzMessage RequestReference="1"
xmlns:ren="http://www.ora.com/namespaces/rename">
<LzCreateInstrumentRequest>
<field name="id" IsUnique="Y">asset #132</field>
<field name="Category" IsUnique="N">Bond Future</field>
<field name="Expiry" IsUnique="N">29-Dec-04</field>
...etc
</LzCreateInstrumentRequest>
</LzMessage>
My XSLT doc is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ren="http://www.ora.com/namespaces/rename">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
omit-xml-declaration="yes"/>
<xsl:variable name="lookup" select="document('')/*[ren:*]"/>
<ren:element from="id" to="instrument_id"/>
<ren:element from="Category" to="name"/>
<ren:element from="Expiry" to="expiration_date"/>
<xsl:template match="/">
<LzMessage>
<xsl:attribute name="RequestReference">
<xsl:value-of select="1"/>
</xsl:attribute>
<xsl:apply-templates/>
</LzMessage>
</xsl:template>
<xsl:template match="senderRef">
<xsl:apply-templates select="full"/>
</xsl:template>
<xsl:template match="full">
<LzCreateInstrumentRequest>
<xsl:apply-templates select="asset"/>
</LzCreateInstrumentRequest>
</xsl:template>
<!-- Asset -->
<xsl:template match="asset">
<xsl:for-each select="*">
<field>
<xsl:choose>
<xsl:when test="$lookup/ren:element[@from=name(current())]">
<xsl:attribute name="name">
<xsl:value-of select="$lookup/ren:element[@from=name(current())]/@to"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="name">
<xsl:value-of select="local-name(.)"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="local-name(.) = 'id'">
<xsl:attribute name="IsUnique"><xsl:text>Y</xsl:text></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="IsUnique"><xsl:text>N</xsl:text></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="."/>
</field>
</xsl:for-each>
</xsl:template>
<!--End Asset-->
</xsl:stylesheet>
Please help! What am I doing wrong?
Adrian