Subject: [xsl] anyway obvious way to speed this tranfrom up? From: "Ray Tayek" <rtayek@xxxxxxxxxxxxxxx> Date: Tue, 30 Dec 2003 11:40:51 -0800 |
hi, newbie managed to get something to work, but it's *real* slow. the xslt's are generated by a program, so they can not be hand tuned, but maybe there is a way to do some things faster? The xml input comes from a spreadsheet via a .csv file, so the original names in the <header> can contains spaces and strange characters, but the names in the <cell>'s are legal database names. any clues will be appreciated. thanks Xslt: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:strip-space elements="*"/> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/inputDocument"> <xsl:element name="outputDocument"> <xsl:apply-templates/> </xsl:element> </xsl:template> <xsl:template match="/inputDocument/header"> <xsl:element name="{name()}"> <xsl:apply-templates/> </xsl:element> <xsl:element name="csvHeader"> <xsl:element name="copy1"/><xsl:element name="renamed1"/><xsl:element name="new3"/><xsl:element name="new1"/><xsl:element name="new2"/><xsl:element name="new4"/><xsl:element name="new5"/> </xsl:element> </xsl:template> <xsl:template match="/inputDocument/header/*"> <xsl:copy-of select="."/> </xsl:template> <xsl:template match="/inputDocument/row"> <xsl:for-each select="child::*"> <xsl:if test="name=/inputDocument/header/name[4]"> <xsl:call-template name="generateOutputRecord"> <xsl:with-param name="index" select="'4'"/> <xsl:with-param name="name1" select="'new1'"/> <xsl:with-param name="value1" select="'new1ValueFromSpecial1Name'"/> <xsl:with-param name="name2" select="'new2'"/> <xsl:with-param name="value2" select="'new2ValueFromSpecial1Name'"/> <xsl:with-param name="name3" select="'new4'"/> <xsl:with-param name="value3" select="''"/> <xsl:with-param name="name4" select="'new5'"/> <xsl:with-param name="value4" select="''"/> </xsl:call-template> </xsl:if> <xsl:if test="name=/inputDocument/header/name[5]"> <xsl:call-template name="generateOutputRecord"> <xsl:with-param name="index" select="'5'"/> <xsl:with-param name="name1" select="'new1'"/> <xsl:with-param name="value1" select="''"/> <xsl:with-param name="name2" select="'new2'"/> <xsl:with-param name="value2" select="'new2ValueFromSpecial2Name'"/> <xsl:with-param name="name3" select="'new4'"/> <xsl:with-param name="value3" select="'new4ValueFromSpecial2Name'"/> <xsl:with-param name="name4" select="'new5'"/> <xsl:with-param name="value4" select="'new5ValueFromSpecial2Name'"/> </xsl:call-template> </xsl:if> </xsl:for-each> </xsl:template> <xsl:template name="generateOutputRecord"> <xsl:param name="index" select="0"/> <xsl:param name="name1" select="defaultValueName"/> <xsl:param name="value1" select="defaultValueValue"/> <xsl:param name="name2" select="defaultValueName"/> <xsl:param name="value2" select="defaultValueValue"/> <xsl:param name="name3" select="defaultValueName"/> <xsl:param name="value3" select="defaultValueValue"/> <xsl:param name="name4" select="defaultValueName"/> <xsl:param name="value4" select="defaultValueValue"/> <xsl:element name="row"> <xsl:attribute name="iln"><xsl:number count="row"/></xsl:attribute> <xsl:for-each select="../*"> <xsl:call-template name="processField"> <xsl:with-param name="xindex" select="$index"/> </xsl:call-template> </xsl:for-each> <xsl:call-template name="addNewFields"> <xsl:with-param name="xname1" select="$name1"/> <xsl:with-param name="xvalue1" select="$value1"/> <xsl:with-param name="xname2" select="$name2"/> <xsl:with-param name="xvalue2" select="$value2"/> <xsl:with-param name="xname3" select="$name3"/> <xsl:with-param name="xvalue3" select="$value3"/> <xsl:with-param name="xname4" select="$name4"/> <xsl:with-param name="xvalue4" select="$value4"/> </xsl:call-template> </xsl:element> </xsl:template> <xsl:template name="addNewFields"> <xsl:param name="xname1" select="defaultValueName"/> <xsl:param name="xvalue1" select="defaultValueValue"/> <xsl:param name="xname2" select="defaultValueName"/> <xsl:param name="xvalue2" select="defaultValueValue"/> <xsl:param name="xname3" select="defaultValueName"/> <xsl:param name="xvalue3" select="defaultValueValue"/> <xsl:param name="xname4" select="defaultValueName"/> <xsl:param name="xvalue4" select="defaultValueValue"/> <xsl:element name="{$xname1}"> <xsl:value-of select="$xvalue1"/> </xsl:element> <xsl:element name="{$xname2}"> <xsl:value-of select="$xvalue2"/> </xsl:element> <xsl:element name="{$xname3}"> <xsl:value-of select="$xvalue3"/> </xsl:element> <xsl:element name="{$xname4}"> <xsl:value-of select="$xvalue4"/> </xsl:element> </xsl:template> <xsl:template name="processField"> <xsl:param name="xindex" select="0"/> <xsl:choose> <xsl:when test="name=/inputDocument/header/name[1]"> <xsl:element name="{name}"> <xsl:choose> <xsl:when test="value='oldValue1'"><xsl:value-of select="'newValue1'"/></xsl:when> <xsl:when test="value='oldValue2'"><xsl:value-of select="'newValue2'"/></xsl:when> <xsl:otherwise> <xsl:value-of select="value"/> </xsl:otherwise> </xsl:choose> </xsl:element> </xsl:when> <xsl:when test="name=/inputDocument/header/name[2]"/> <xsl:when test="name=/inputDocument/header/name[3]"> <xsl:element name="renamed1"> <xsl:value-of select="value"/> </xsl:element> </xsl:when> <xsl:when test="name=/inputDocument/header/name[4] and $xindex='4'"> <xsl:element name="new3"> <xsl:value-of select="value"/> </xsl:element> </xsl:when> <xsl:when test="name=/inputDocument/header/name[5] and $xindex='5'"> <xsl:element name="new3"> <xsl:value-of select="value"/> </xsl:element> </xsl:when> </xsl:choose> </xsl:template> </xsl:stylesheet> xml input file: <?xml version="1.0" encoding="UTF-8"?> <inputDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="U:\projects\tender\tender2\com\ediidea\tender \testFiles\inputDocument.xsd"> <header> <name icn="1">copy1</name> <name icn="2">remove1</name> <name icn="3">rename1</name> <name icn="4">special1</name> <name icn="5">special2</name> </header> <row> <cell> <name>copy1</name> <value>copy1Value1</value> </cell> <cell> <name>remove1</name> <value>remove1Value1</value> </cell> <cell> <name>rename1</name> <value>rename1Value1</value> </cell> <cell> <name>special1</name> <value>special1Value1</value> </cell> <cell> <name>special2</name> <value>special2Value1</value> </cell> </row> <row> <cell> <name>copy1</name> <value>copy1Value2</value> </cell> <cell> <name>remove1</name> <value>remove1Value2</value> </cell> <cell> <name>rename1</name> <value>rename1Value2</value> </cell> <cell> <name>special1</name> <value>special1Value2</value> </cell> <cell> <name>special2</name> <value>special2Value2</value> </cell> </row> <row> <cell> <name>copy1</name> <value>oldValue1</value> </cell> <cell> <name>remove1</name> <value>remove1Value3</value> </cell> <cell> <name>rename1</name> <value>rename1Value3</value> </cell> <cell> <name>special1</name> <value>special1Value3</value> </cell> <cell> <name>special2</name> <value>special2Value3</value> </cell> </row> <row> <cell> <name>copy1</name> <value>oldValue2</value> </cell> <cell> <name>remove1</name> <value>remove1Value4</value> </cell> <cell> <name>rename1</name> <value>rename1Value4</value> </cell> <cell> <name>special1</name> <value>special1Value4</value> </cell> <cell> <name>special2</name> <value>special2Value4</value> </cell> </row> <row> <cell> <name>copy1</name> <value/> </cell> <cell> <name>remove1</name> <value/> </cell> <cell> <name>rename1</name> <value/> </cell> <cell> <name>special1</name> <value/> </cell> <cell> <name>special2</name> <value/> </cell> </row> </inputDocument> xml output file: <?xml version="1.0" encoding="UTF-8"?> <outputDocument> <header> <name icn="1">copy1</name> <name icn="2">remove1</name> <name icn="3">rename1</name> <name icn="4">special1</name> <name icn="5">special2</name> </header> <csvHeader> <copy1/> <renamed1/> <new3/> <new1/> <new2/> <new4/> <new5/> </csvHeader> <row iln="1"> <copy1>copy1Value1</copy1> <renamed1>rename1Value1</renamed1> <new3>special1Value1</new3> <new1>new1ValueFromSpecial1Name</new1> <new2>new2ValueFromSpecial1Name</new2> <new4/> <new5/> </row> <row iln="1"> <copy1>copy1Value1</copy1> <renamed1>rename1Value1</renamed1> <new3>special2Value1</new3> <new1/> <new2>new2ValueFromSpecial2Name</new2> <new4>new4ValueFromSpecial2Name</new4> <new5>new5ValueFromSpecial2Name</new5> </row> <row iln="2"> <copy1>copy1Value2</copy1> <renamed1>rename1Value2</renamed1> <new3>special1Value2</new3> <new1>new1ValueFromSpecial1Name</new1> <new2>new2ValueFromSpecial1Name</new2> <new4/> <new5/> </row> <row iln="2"> <copy1>copy1Value2</copy1> <renamed1>rename1Value2</renamed1> <new3>special2Value2</new3> <new1/> <new2>new2ValueFromSpecial2Name</new2> <new4>new4ValueFromSpecial2Name</new4> <new5>new5ValueFromSpecial2Name</new5> </row> <row iln="3"> <copy1>newValue1</copy1> <renamed1>rename1Value3</renamed1> <new3>special1Value3</new3> <new1>new1ValueFromSpecial1Name</new1> <new2>new2ValueFromSpecial1Name</new2> <new4/> <new5/> </row> <row iln="3"> <copy1>newValue1</copy1> <renamed1>rename1Value3</renamed1> <new3>special2Value3</new3> <new1/> <new2>new2ValueFromSpecial2Name</new2> <new4>new4ValueFromSpecial2Name</new4> <new5>new5ValueFromSpecial2Name</new5> </row> <row iln="4"> <copy1>newValue2</copy1> <renamed1>rename1Value4</renamed1> <new3>special1Value4</new3> <new1>new1ValueFromSpecial1Name</new1> <new2>new2ValueFromSpecial1Name</new2> <new4/> <new5/> </row> <row iln="4"> <copy1>newValue2</copy1> <renamed1>rename1Value4</renamed1> <new3>special2Value4</new3> <new1/> <new2>new2ValueFromSpecial2Name</new2> <new4>new4ValueFromSpecial2Name</new4> <new5>new5ValueFromSpecial2Name</new5> </row> <row iln="5"> <copy1/> <renamed1/> <new3/> <new1>new1ValueFromSpecial1Name</new1> <new2>new2ValueFromSpecial1Name</new2> <new4/> <new5/> </row> <row iln="5"> <copy1/> <renamed1/> <new3/> <new1/> <new2>new2ValueFromSpecial2Name</new2> <new4>new4ValueFromSpecial2Name</new4> <new5>new5ValueFromSpecial2Name</new5> </row> </outputDocument> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Adding namespace to an XM, Kanthi | Thread | Re: [xsl] anyway obvious way to spe, aa@xxxxxxxxxxxxx |
RE: [xsl] Adding namespace to an XM, Kanthi | Date | Re: [xsl] anyway obvious way to spe, aa@xxxxxxxxxxxxx |
Month |