Hi Jason,
Thanks for your help.. Sorry for late reply as I was
testing it.. Your XSL is working fine.. except a small
thing I want which I mentioned in my requirement..
It is generating SQL as
insert into table(LEVEL, TIME, TICKS, COMPONENT,
SUBCOMPONENT, Datum, Datum)
But I want the column name from this part of XML
<ENTRY type="ProcEntry">
<Datum name="Adapter">SA</Datum>
<Datum name="Method">ServiceabilityAgent</Datum>
</ENTRY>
as Adapter and Method and not as Datum! .. *If
somebody can tell how can I get the name of the
attribute*, I can try modifying the XSL..
Regards,
Mukul
--- Jason <estudio(_at_)china(_dot_)com> wrote:
Pls try this
------------------------------------------------------------------------
-------------------------------------
XML file:
<!-- edited with XMLSPY v5 rel. 2 U
(http://www.xmlspy.com) by Jason
(GRT) -->
<recordset>
<trace>
<LEVEL>FLOW</LEVEL>
<TIME>2003-05-06 09:57:59:9567238</TIME>
<TICKS>631878118799567238</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Method">Init</Datum>
</ENTRY>
</trace>
<trace>
<LEVEL>FLOW</LEVEL>
<TIME>2003-05-06 09:58:00:2830701</TIME>
<TICKS>631878118802830701</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Method">InitMgmt</Datum>
</ENTRY>
</trace>
<trace>
<LEVEL>FULL</LEVEL>
<TIME>2003-05-06 09:58:00:2830701</TIME>
<TICKS>631878118802830701</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Adapter">SA</Datum>
<Datum name="Method">ServiceabilityAgent</Datum>
</ENTRY>
</trace>
</recordset>
------------------------------------------------------------------------
-------------------------------------
XSLT file:
<?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="/">
<query>
<xsl:for-each select="//trace">
<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>
<data>
insert into table
(<xsl:value-of select="$Columns"/>)
values
(<xsl:value-of select="$Values"/>)
</data>
</xsl:for-each>
</query>
</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(norma
lize-space(string($Values)))-1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="normalize-space(substring(normalize-space(string($Values)),strin
g-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(.)!='ENTRY']">
<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(.)='ENTRY']">
<xsl:for-each select="Datum">
<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>
</xsl:template>
</xsl:stylesheet>
------------------------------------------------------------------------
-------------------------------------
it is running, but some place need be
optimized...,and you must think
about the type of the Fields: int, char...etc
Jason(_at_)GRT
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On
Behalf Of Mukul
Sent: 2003¦~6¤ë13¤é 10:02
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Problem writing XSLT
Hello,
I have an XML file in the form below.
<trace>
<LEVEL>FLOW</LEVEL>
<TIME>2003-05-06 09:57:59:9567238</TIME>
<TICKS>631878118799567238</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Method">Init</Datum>
</ENTRY>
</trace>
<trace>
<LEVEL>FLOW</LEVEL>
<TIME>2003-05-06 09:58:00:2830701</TIME>
<TICKS>631878118802830701</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Method">InitMgmt</Datum>
</ENTRY>
</trace>
<trace>
<LEVEL>FULL</LEVEL>
<TIME>2003-05-06 09:58:00:2830701</TIME>
<TICKS>631878118802830701</TICKS>
<COMPONENT>NS</COMPONENT>
<SUBCOMPONENT>NS_SVC</SUBCOMPONENT>
<ENTRY type="ProcEntry">
<Datum name="Adapter">SA</Datum>
<Datum name="Method">ServiceabilityAgent</Datum>
</ENTRY>
</trace>
I need to make an XSL file in
such a way so that resulted o/p will be in the
following given below.
<Query>
<Data> insert into
table(LEVEL,TIME,TICKS,COMPONENT,SUBCOMPONENT,Method)
values('FLOW',2003-05-06
09:58:00:2830701,631878118799567238,NS,SVC,Init)</Data>
<Data> insert into
table(LEVEL,TIME,TICKS,COMPONENTS,SUBCOMPONENTS,Adapter,Method)
values('FLOW',2003-05-06
09:58:00:2830701,631878118799567238,NS,SVC,SA,ServiceabilityAgent)</Data
</Query>
Pls note --
1 - each <trace> tag will generate a SQL in the
corresponding <data> tag
2 - the value of columns of the SQL will come from
<LEVEL>, <TIME>, <TICKS>, <COMPONENT>,
<SUBCOMPONENT>
and attribute values of <Datum> tag for e.g. Adapter
and Method. The table name is a constant.
3 - values of table columns will be corresponding
values of these tags
I'll appreciate a response to the above problem..
Regards,
Mukul
__________________________________
Do you Yahoo!?
Yahoo! Calendar - Free online calendar with sync to
Outlook(TM).
http://calendar.yahoo.com
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list