Subject: [xsl] need help on stylesheet efficiency From: Malia Zaheer <mzaheer@xxxxxxxxxxxxxxxx> Date: Thu, 25 Jul 2002 12:52:52 -0400 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] ANN: XSLT Tools and Resou, Chuck White | Thread | RE: [xsl] need help on stylesheet e, Michael Kay |
RE: [xsl] Assigning a dynamic value, Michael Kay | Date | RE: [xsl] Assigning a dynamic value, bryan |
Month |