|
Subject: Re: [xsl] Getting node values from different xpath for creating SQL insert statements From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx> Date: Fri, 8 Feb 2008 22:45:51 +0530 |
Hi Tariq,
From your problem description, it seems, you are having problem
considering <StartTime> and <EndTime> in the query.
I think following technique should help ...
<xsl:template match="/">
<xsl:variable name="startTime" select="Report/Header/Row/StartTime" />
<xsl:variable name="endTime" select="Report/Header/Row/EndTime" />
<!--
Write as it is in your code
-->
<xsl:variable name="Columns" select="concat('starttime, endtime, ',
$Columns)" />
<xsl:variable name="Values" select="concat("'",
$startTime, "'", "'", $endTime,
"'", ', $Values)" />
insert into table
(<xsl:value-of select="$Columns"/>)
values
(<xsl:value-of select="$Values"/>);
</xsl:for-each>
</xsl:template>
PS: This is not tested. Hope, I have understood your query ...
On Feb 8, 2008 8:01 AM, Tariq Ahsan <tariqahsan@xxxxxxxxx> wrote:
> Hello,
>
> I borrowed a script from one the postings and tweaked
> a little bit to work for my need. But the problem I
> have is I need to grab to separate node values outside
> of the xpath I am getting rest of the data.
>
> Here's the input xml file -
>
> <?xml version="1.0" encoding="utf-8" ?>
> - <Report>
> - <Header>
> - <Row>
> <StartTime>06/02/2008 11:13:36</StartTime>
> <EndTime>02/06/2008 11:13:36</EndTime>
> </Row>
> </Header>
> - <Data>
> - <Row>
> <Col1>1</Col1>
> <Col2>abc</Col2>
> <Col3>xyz</Col3>
> </Row>
> - <Row>
> <Col1>2</Col1>
> <Col2>def</Col2>
> <Col3>ijk</Col3>
> </Row>
> - <Row>
> <Col1>3</Col1>
> <Col2>efg</Col2>
> <Col3>uvw</Col3>
> </Row>
> -
>
>
>
> Here's the xslt I currently have -
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="xml" version="1.0"
> encoding="UTF-8" indent="yes"/>
> <xsl:template match="/">
> <xsl:for-each select="Report/Data/Row">
> <xsl:variable name="Columns">
> <xsl:call-template name="getValues">
> <xsl:with-param name="V" select="."/>
> <xsl:with-param name="T" select="'Columns'"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:variable name="Values">
> <xsl:call-template name="getValues">
> <xsl:with-param name="V" select="."/>
> <xsl:with-param name="T" select="'Values'"/>
> </xsl:call-template>
> </xsl:variable>
>
> insert into table
> (<xsl:value-of select="$Columns"/>)
> values
> (<xsl:value-of select="$Values"/>);
>
> </xsl:for-each>
>
> </xsl:template>
>
> <xsl:template name="getValues"> <xsl:param name="V"/>
> <xsl:param name="T"/>
> <xsl:variable name="Values">
> <xsl:call-template name="getValueString">
> <xsl:with-param name="V" select="$V"/>
> <xsl:with-param name="T" select="$T"/>
> </xsl:call-template>
> </xsl:variable>
> <xsl:choose>
> <xsl:when
>
> test="normalize-space(substring(normalize-space(string($Values)),string-length(normalize-space(string($Values))),1))=','">
> <xsl:value-of
>
> select="substring(normalize-space(string($Values)),1,string-length(normalize-space(string($Values)))-1)"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of
> select="normalize-space(substring(normalize-space(string($Values)),string-length(normalize-space(string($Values))),1))"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> <xsl:template name="getValueString">
> <xsl:param name="V"/>
> <xsl:param name="T"/>
> <xsl:for-each select="$V/*[name(.) != not(node())]">
> <!-- <xsl:for-each select="$V/*[name(.)]"> -->
> <xsl:choose>
> <xsl:when test="$T='Columns'">
> <xsl:value-of select="name(.)"/>,
> </xsl:when>
> <xsl:otherwise>
> '<xsl:value-of select="."/>',
> </xsl:otherwise>
> </xsl:choose>
> </xsl:for-each>
> <xsl:for-each select="$V/*[name(.) = not(node())]">
> <xsl:choose>
> <xsl:when test="$T='Columns'">
> <xsl:value-of select="name(.)"/>,
>
> </xsl:when>
> <xsl:otherwise>
> '<xsl:value-of select="."/>',
> <!-- '<xsl:value-of select="NULL"/>',-->
> </xsl:otherwise>
> </xsl:choose>
>
>
> </xsl:for-each>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> Need to have a file output that would contain -
>
> insert into table (starttime, endtime, col1, col2,
> col3) values ('06/02/2008 11:13:36', '06/02/2008
> 11:13:36', 1, 'abc', 'xyz');
>
> and so forth.
>
> Would appreciate greatly if I could get some tips to
> solving this problem.
>
> Thanks
>
> Tariq
--
Regards,
Mukul Gandhi
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Getting node values from diff, Tariq Ahsan | Thread | [xsl] Ignore case while grouping, Manish_Jaiswal |
| Re: [xsl] distinct-values() optimiz, David Carlisle | Date | [xsl] result-document error, R. Neville |
| Month |