xsl-list
[Top] [All Lists]

RE: Problem writing XSLT

2003-06-13 20:46:42
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



<Prev in Thread] Current Thread [Next in Thread>