|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: implementing for-each for comparision
This transformation:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="AP">'</xsl:variable>
<xsl:variable name="Q">"</xsl:variable>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:template match="/">
<xsl:apply-templates select="/*/FixedTables/Table"/>
</xsl:template>
<xsl:template match="FixedTables/Table">
<xsl:for-each select="Column">
<xsl:variable name="vlcName"
select="translate(@Name, $upper, $lower)"/>
<xsl:variable name="vMatchColumn"
select="/*/Tables/Table[@Name = current()/../@Name]/Column
[@Name = $vlcName]"/>
<xsl:choose>
<xsl:when test="$vMatchColumn">
<xsl:value-of select="$vMatchColumn/@Value"/>
<xsl:if test="$vMatchColumn/@Datatype = 'date'">
<xsl:value-of select="' Date '"/>
<xsl:value-of select="concat($Q, 'M/DD/YYYY HH:MI:SS AM', $Q)"/>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="concat(@Name,
' FILLER char terminated by ', $AP, '`', $AP)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position() != last()">
<xsl:value-of select="',
'"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
when applied on your source.xml (for convenience I merged the two files into
a single one):
<Root>
<Tables>
<Table Name="T1" Value="tableName1">
<Column Name="col1" Value="colVal1" Datatype="char"/>
<Column Name="col2" Value="colVal2" Datatype="char"/>
<Column Name="col3" Value="colVal3" Datatype="date"/>
<Column Name="col5" Value="colVal5" Datatype="char"/>
</Table>
</Tables>
<FixedTables>
<Table Name="T1">
<Column Name="Col1" />
<Column Name="Col2" />
<Column Name="Col3" />
<Column Name="Col4" />
<Column Name="Col5" />
</Table>
</FixedTables>
</Root>
produces the wanted result:
colVal1,
colVal2,
colVal3 Date "M/DD/YYYY HH:MI:SS AM",
Col4 FILLER char terminated by '`',
colVal5
=====
Cheers,
Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL
"Dipesh Khakhkhar" <dkhakhkh@xxxxxxxxxxxxxxx> wrote in message
news:3F7DF6AD@xxxxxxxxxxxxx
> Hi,
>
> I am having xml like this.
> Input xml (File1)
> ----------
> <Root>
> <Tables>
> <Table Name="T1" Value="tableName1">
> <Column Name="col1" Value="colVal1" Datatype="char"/>
> <Column Name="col2" Value="colVal2" Datatype="char"/>
> <Column Name="col3" Value="colVal3" Datatype="date"/>
> <Column Name="col5" Value="colVal5" Datatype="char"/>
> </Table>
> </Table>
> <Root>
>
> ===================================================================
>
> I am reding one more xml file for mapping columns. I am reading it using
> document function. This xml gives me the name of the column for which data
is
> available in the datafile.
>
> Document Mapping xml (File2)
> --------------------
> <Root>
> <FixedTables>
> <Table Name="T1">
> <Column Name="Col1" />
> <Column Name="Col2" />
> <Column Name="Col3" />
> <Column Name="Col4" />
> <Column Name="Col5" />
> </Table>
> </Root>
>
>
> I am creating a text file(basically control file which i am feeding to sql
> loader) out of it and needs output like this. I am showing a part of my
> desired output.
>
> Desried output (File3)
> --------------
> INTO TABLE tableName1
> (
> colVal1,
> colVal2,
> colVal3 Date "MM/DD/YYYY HH:MI:SS AM",
> col4 FILLER char terminated by '`',
> colVal5
> )
>
> ====================================================================
>
> I am able to get the output properly if there is no col4 in the mapping
file
> i.e. file2 then not writing line 5 above in the output.
>
> I want to implement something like
> 1) Read each column from the File1.
> 2) Match it will all the columns of File2
> 3) If name of column is same then get the value of column from file1 and
> check if datatype attribute is date then output "Date MM:DD:YYYY HH:MI:SS
AM"
> otherwise don't do anything.
> 4) If match exit from the for loop (is this possible in xsl)
> 5) After doing match for all the columns of file1, whichever columns of
file2
> are not matched shall be written within parenthesis like
> "Column@Name (from file2) FILLER char terminated by '`'. As shown in the
above
> desired output col4 came only once in the output for matching all the
columns
> of File1 with that of file2.
>
> I hope i am clear in explaining my problem.
> Any help to implement the above logic would be highly appreciated.
>
> Eagerly waiting for reply.
>
> Regards,
> Dipesh
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








