[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

need help on stylesheet efficiency

Subject: need help on stylesheet efficiency
From: Malia Zaheer <mzaheer@xxxxxxxxxxxxxxxx>
Date: Thu, 25 Jul 2002 12:52:52 -0400
timestamp in stylesheet
Hi,

I have a stylesheet that I use to process large xml files that are larger
than 1MB.  Using Xalan, it takes 3 minutes and 40 seconds to transform only
75KB xml.  I was wondering if people on this list can help me with improving
the efficiency of my stylesheet.  Here it is:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="java" version="1.0"
xmlns:java="http://xml.apache.org/xslt/java"><xsl:output indent="yes"
method="xml"/><xsl:template match="/"><xsl:element
name="document"><xsl:call-template
name="template_1"/></xsl:element></xsl:template>

<xsl:template name="template_1">
<xsl:for-each select="/document/record/Flags[not(preceding::Flags=.)]">
<xsl:variable name="Flags_1" select="."/>
<xsl:if test="/document[record[Flags=$Flags_1]]">
<xsl:for-each
select="/document/record/SPM_RegioId[not(preceding::SPM_RegioId=.)]">
<xsl:variable name="SPM_RegioId_2" select="."/>
<xsl:if
test="/document[record[Flags=$Flags_1][SPM_RegioId=$SPM_RegioId_2]]">
<xsl:for-each
select="/document/record/SPM_DeviceId[not(preceding::SPM_DeviceId=.)]">
<xsl:variable name="SPM_DeviceId_3" select="."/>
<xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SPM_Reg
ioId=$SPM_RegioId_2]]">
<xsl:for-each
select="/document/record/SUB_Instance[not(preceding::SUB_Instance=.)]">
<xsl:variable name="SUB_Instance_4" select="."/>
<xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SUB_Ins
tance=$SUB_Instance_4][SPM_RegioId=$SPM_RegioId_2]]">
<xsl:for-each
select="/document/record/SPM_SubId[not(preceding::SPM_SubId=.)]">
<xsl:variable name="SPM_SubId_5" select="."/>
<xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SUB_Ins
tance=$SUB_Instance_4][SPM_SubId=$SPM_SubId_5][SPM_RegioId
=$SPM_RegioId_2]]"
>
<xsl:for-each
select="/document/record/SPM_IspId[not(preceding::SPM_IspId=.)]">
<xsl:variable name="SPM_IspId_6" select="."/><xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SUB_Ins
tance=$SUB_Instance_4][SPM_SubId=$SPM_SubId_5][SPM_RegioId
=$SPM_RegioId_2][S
PM_IspId=$SPM_IspId_6]]">
<xsl:for-each
select="/document/record/TimeStamp[not(preceding::TimeStamp
=.)]"><xsl:variab
le name="TimeStamp_7" select="."/>
<xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SUB_Ins
tance=$SUB_Instance_4][SPM_SubId=$SPM_SubId_5][SPM_RegioId
=$SPM_RegioId_2][T
imeStamp=$TimeStamp_7][SPM_IspId=$SPM_IspId_6]]">
<xsl:for-each
select="/document/record/SPM_TRUNKID[not(preceding::SPM_TRUNKID
=.)]"><xsl:va
riable name="SPM_TRUNKID_8" select="."/>
<xsl:if
test="/document[record[SPM_DeviceId=$SPM_DeviceId_3][Flags
=$Flags_1][SPM_TRU
NKID=$SPM_TRUNKID_8][SUB_Instance=$SUB_Instance_4][SPM_SubId
=$SPM_SubId_5][S
PM_RegioId=$SPM_RegioId_2][TimeStamp=$TimeStamp_7][SPM_IspId
=$SPM_IspId_6]]"
>
<xsl:for-each
select="/document/record/IFI_IPACKETS[not(preceding::IFI_IPACKETS
=.)]"><xsl:
variable name="IFI_IPACKETS_9" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[Flags=$Flags_1][SPM_RegioId=$SPM_RegioId_2][SPM_TRUNKID
=$SPM_TRUNKID_8][SUB
_Instance=$SUB_Instance_4][SPM_DeviceId=$SPM_DeviceId_3][SPM_IspId
=$SPM_IspI
d_6][TimeStamp=$TimeStamp_7]]">
<xsl:for-each
select="/document/record/IFI_OPACKETS[not(preceding::IFI_OPACKETS=.)]">
<xsl:variable name="IFI_OPACKETS_10" select="."/><xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OPACKETS=$IFI_OPACKETS_10][Flags=$Flags_1][SPM_RegioId=$SPM_RegioId_2]
[
SPM_TRUNKID=$SPM_TRUNKID_8][SUB_Instance=$SUB_Instance_4][SPM_DeviceId
=$SPM_
DeviceId_3][SPM_IspId=$SPM_IspId_6][TimeStamp=$TimeStamp_7]]">
<xsl:for-each
select="/document/record/IFI_IBYTES[not(preceding::IFI_IBYTES
=.)]"><xsl:vari
able name="IFI_IBYTES_11" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OPACKETS=$IFI_OPACKETS_10][Flags=$Flags_1][SPM_RegioId=$SPM_RegioId_2]
[
IFI_IBYTES=$IFI_IBYTES_11][SPM_TRUNKID=$SPM_TRUNKID_8][SUB_Instance
=$SUB_Ins
tance_4][SPM_DeviceId=$SPM_DeviceId_3][SPM_IspId=$SPM_IspId_6][TimeStamp
=$Ti
meStamp_7]]">
<xsl:for-each
select="/document/record/IFI_OBYTES[not(preceding::IFI_OBYTES=.)]">
<xsl:variable name="IFI_OBYTES_12" select="."/><xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OBYTES=$IFI_OBYTES_12][IFI_OPACKETS=$IFI_OPACKETS_10][Flags
=$Flags_1][S
PM_RegioId=$SPM_RegioId_2][IFI_IBYTES=$IFI_IBYTES_11][SPM_TRUNKID
=$SPM_TRUNK
ID_8][SUB_Instance=$SUB_Instance_4][SPM_DeviceId=$SPM_DeviceId_3][SPM_IspId
=
$SPM_IspId_6][TimeStamp=$TimeStamp_7]]"><xsl:for-each
select="/document/record/IFI_IQDROPS[not(preceding::IFI_IQDROPS
=.)]"><xsl:va
riable name="IFI_IQDROPS_13" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OBYTES=$IFI_OBYTES_12][IFI_OPACKETS=$IFI_OPACKETS_10][Flags
=$Flags_1][I
FI_IQDROPS=$IFI_IQDROPS_13][SPM_RegioId=$SPM_RegioId_2][IFI_IBYTES
=$IFI_IBYT
ES_11][SPM_TRUNKID=$SPM_TRUNKID_8][SUB_Instance
=$SUB_Instance_4][SPM_DeviceI
d=$SPM_DeviceId_3][SPM_IspId=$SPM_IspId_6][TimeStamp
=$TimeStamp_7]]"><xsl:fo
r-each select="/document/record/IFI_OQDROPS[not(preceding::IFI_OQDROPS
=.)]">
<xsl:variable name="IFI_OQDROPS_14" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OBYTES=$IFI_OBYTES_12][IFI_OPACKETS=$IFI_OPACKETS_10][Flags
=$Flags_1][I
FI_IQDROPS=$IFI_IQDROPS_13][SPM_RegioId=$SPM_RegioId_2][IFI_IBYTES
=$IFI_IBYT
ES_11][SPM_TRUNKID=$SPM_TRUNKID_8][SUB_Instance
=$SUB_Instance_4][SPM_DeviceI
d=$SPM_DeviceId_3][SPM_IspId=$SPM_IspId_6][TimeStamp
=$TimeStamp_7][IFI_OQDRO
PS=$IFI_OQDROPS_14]]">
<xsl:for-each
select="/document/record/PKTS_DROP_ERR[not(preceding::PKTS_DROP_ERR
=.)]"><xs
l:variable name="PKTS_DROP_ERR_15" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[IFI_OBYTES=$IFI_OBYTES_12][IFI_OPACKETS=$IFI_OPACKETS_10][Flags
=$Flags_1][I
FI_IQDROPS=$IFI_IQDROPS_13][SPM_RegioId=$SPM_RegioId_2][IFI_IBYTES
=$IFI_IBYT
ES_11][PKTS_DROP_ERR=$PKTS_DROP_ERR_15][SPM_TRUNKID
=$SPM_TRUNKID_8][SUB_Inst
ance=$SUB_Instance_4][SPM_DeviceId=$SPM_DeviceId_3][SPM_IspId=$SPM_IspId_6]
[
TimeStamp=$TimeStamp_7][IFI_OQDROPS=$IFI_OQDROPS_14]]"><xsl:for-each
select="/document/record/MULTICAST_IN_PKTS[not(preceding::MULTICAST_IN_PKTS
=
.)]">
<xsl:variable name="MULTICAST_IN_PKTS_16" select="."/>
<xsl:if
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[MULTICAST_IN_PKTS=$MULTICAST_IN_PKTS_16][IFI_OBYTES
=$IFI_OBYTES_12][IFI_OPA
CKETS=$IFI_OPACKETS_10][Flags=$Flags_1][IFI_IQDROPS
=$IFI_IQDROPS_13][SPM_Reg
ioId=$SPM_RegioId_2][IFI_IBYTES=$IFI_IBYTES_11][PKTS_DROP_ERR
=$PKTS_DROP_ERR
_15][SPM_TRUNKID=$SPM_TRUNKID_8][SUB_Instance=$SUB_Instance_4][SPM_DeviceId
=
$SPM_DeviceId_3][SPM_IspId=$SPM_IspId_6][TimeStamp
=$TimeStamp_7][IFI_OQDROPS
=$IFI_OQDROPS_14]]">
<xsl:for-each
select
="/document/record/MULTICAST_OUT_PKTS[not(preceding::MULTICAST_OUT_PKT
S=.)]"><xsl:variable name="MULTICAST_OUT_PKTS_17" select="."/>
<xsl:choose>
<xsl:when
test="/document[record[SPM_SubId=$SPM_SubId_5][IFI_IPACKETS
=$IFI_IPACKETS_9]
[MULTICAST_IN_PKTS=$MULTICAST_IN_PKTS_16][IFI_OBYTES
=$IFI_OBYTES_12][IFI_OPA
CKETS=$IFI_OPACKETS_10][Flags=$Flags_1][MULTICAST_OUT_PKTS
=$MULTICAST_OUT_PK
TS_17][IFI_IQDROPS=$IFI_IQDROPS_13][SPM_RegioId=$SPM_RegioId_2][IFI_IBYTES
=$
IFI_IBYTES_11][PKTS_DROP_ERR=$PKTS_DROP_ERR_15][SPM_TRUNKID=$SPM_TRUNKID_8]
[
SUB_Instance=$SUB_Instance_4][SPM_DeviceId=$SPM_DeviceId_3][SPM_IspId
=$SPM_I
spId_6][TimeStamp=$TimeStamp_7][IFI_OQDROPS=$IFI_OQDROPS_14]]">
<xsl:element name="record"><xsl:element name="Flags"><xsl:value-of
select="$Flags_1"/></xsl:element><xsl:element
name="SPM_RegioId"><xsl:value-of select="$SPM_RegioId_2"/></xsl:element>
<xsl:element name="SPM_DeviceId"><xsl:value-of
select="$SPM_DeviceId_3"/></xsl:element>
<xsl:element name="SUB_Instance"><xsl:value-of
select="$SUB_Instance_4"/></xsl:element>
<xsl:element name="SPM_SubId"><xsl:value-of
select="$SPM_SubId_5"/></xsl:element>
<xsl:element name="SPM_IspId"><xsl:value-of
select="$SPM_IspId_6"/></xsl:element>
<xsl:element name="TimeStamp"><xsl:value-of
select="$TimeStamp_7"/></xsl:element>
<xsl:element name="SPM_TRUNKID"><xsl:value-of
select="$SPM_TRUNKID_8"/></xsl:element>
<xsl:element name="IFI_IPACKETS"><xsl:value-of
select="$IFI_IPACKETS_9"/></xsl:element>
<xsl:element name="IFI_OPACKETS"><xsl:value-of
select="$IFI_OPACKETS_10"/></xsl:element>
<xsl:element name="IFI_IBYTES"><xsl:value-of
select="$IFI_IBYTES_11"/></xsl:element>
<xsl:element name="IFI_OBYTES"><xsl:value-of
select="$IFI_OBYTES_12"/></xsl:element>
<xsl:element name="IFI_IQDROPS"><xsl:value-of
select="$IFI_IQDROPS_13"/></xsl:element>
<xsl:element name="IFI_OQDROPS"><xsl:value-of
select="$IFI_OQDROPS_14"/></xsl:element>
<xsl:element name="PKTS_DROP_ERR"><xsl:value-of
select="$PKTS_DROP_ERR_15"/></xsl:element><xsl:element
name="MULTICAST_IN_PKTS"><xsl:value-of
select="$MULTICAST_IN_PKTS_16"/></xsl:element><xsl:element
name="MULTICAST_OUT_PKTS"><xsl:value-of
select="$MULTICAST_OUT_PKTS_17"/></xsl:element></xsl:element>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:if></xsl:for-each></xsl:if></xsl:for-each></xsl:if>
</xsl:for-each></xsl:if></xsl:for-each></xsl:if></xsl:for-each></xsl:if>
</xsl:for-each></xsl:if></xsl:for-each></xsl:if></xsl:for-each></xsl:if>
</xsl:for-each></xsl:if></xsl:for-each></xsl:if></xsl:for-each></xsl:if>
</xsl:for-each>
</xsl:if></xsl:for-each></xsl:if></xsl:for-each></xsl:if></xsl:for-each>
</xsl:template></xsl:stylesheet>


And sample data record is:

<record><Flags>0</Flags>
<SPM_RegioId>1</SPM_RegioId>
<SPM_DeviceId>1</SPM_DeviceId>
<SUB_Instance>-1</SUB_Instance>
<SPM_SubId>-1</SPM_SubId>
<SPM_IspId>6</SPM_IspId>
<TimeStamp>Thu Jul 04 17:40:30 EDT 2002</TimeStamp>
<SPM_TRUNKID>45</SPM_TRUNKID>
<IFI_IPACKETS>113</IFI_IPACKETS>
<IFI_OPACKETS>219</IFI_OPACKETS>
<IFI_IBYTES>7002</IFI_IBYTES>
<IFI_OBYTES>13038</IFI_OBYTES>
<IFI_IQDROPS>0</IFI_IQDROPS>
<IFI_OQDROPS>0</IFI_OQDROPS>
<PKTS_DROP_ERR>0</PKTS_DROP_ERR>
<MULTICAST_IN_PKTS>6760</MULTICAST_IN_PKTS>
<MULTICAST_OUT_PKTS>0</MULTICAST_OUT_PKTS>
</record>

I know that the sylesheet is not efficient. That is because I am generating
it programmatically, not by hand so that I can customize it to each type of
input.  Any help on making it more effieicnt would be greatly appreciated.
What can I use instead of preceding:: axis? 

Thank you so much!
Malia


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.