xml - xsl performance issue -
i having trouble performance of xsl mapper. here example xsl (note: real xsl goes on 10 000 lines)
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/biztalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0" xmlns:ns3="http://microsoft.com/healthcare/hl7/2x/2.3.1/tables" xmlns:ns4="http://microsoft.com/healthcare/hl7/2x/2.3.1/datatypes" xmlns:ns0="http://microsoft.com/healthcare/hl7/2x/2.3.1/segments" xmlns:ns2="http://microsoft.com/healthcare/hl7/2x" xmlns:ns1="http://cegeka.c2m.accelerator.schemas.segments_c2m"> <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> <xsl:template match="/"> <xsl:apply-templates select="/ns2:adt_231_glo_def" /> </xsl:template> <xsl:template match="/ns2:adt_231_glo_def"> <ns2:adt_231_glo_def> <xsl:for-each select="evn_eventtype"> <evn_eventtype> <xsl:if test="normalize-space(evn_1_eventtypecode/text())"> <evn_1_eventtypecode> <xsl:value-of select="evn_1_eventtypecode/text()" /> </evn_1_eventtypecode> </xsl:if> <evn_2_recordeddatetime> <xsl:if test="normalize-space(evn_2_recordeddatetime/ts_0_timeofanevent/text())"> <ts_0_timeofanevent> <xsl:value-of select="evn_2_recordeddatetime/ts_0_timeofanevent/text()" /> </ts_0_timeofanevent> </xsl:if> </evn_2_recordeddatetime> <xsl:for-each select="evn_3_datetimeplannedevent"> <xsl:if test="normalize-space(ts_0_timeofanevent/text())"> <evn_3_datetimeplannedevent> <ts_0_timeofanevent> <xsl:value-of select="ts_0_timeofanevent/text()" /> </ts_0_timeofanevent> </evn_3_datetimeplannedevent> </xsl:if> </xsl:for-each> <xsl:if test="normalize-space(evn_4_eventreasoncode/text())"> <evn_4_eventreasoncode> <xsl:value-of select="evn_4_eventreasoncode/text()" /> </evn_4_eventreasoncode> </xsl:if> </evn_eventtype> </xsl:for-each> </ns2:adt_231_glo_def> </xsl:template> </xsl:stylesheet>
so doing is:
- copy nodes want source xml - don't copy empty nodes or nodes contain break (hence why check normalize-space(/text())
now execution time 1 second, normal? use mapping in biztalk can process @ least 10 messages per second (if not many more :p) map causing delay, can process 1 message per second :(
now not xsl guru unfortunatly if can give me advice, welcome :)
thx
i copy nodes want source xml
i don't copy empty nodes or nodes contain break (hence why check normalize-space)
first, suggest can use identity transform overrides. example code below copy elements, excluding "with empty (after whitespace normalization) string values , no child elements or attributes".
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[not(normalize-space()) , not(*) , not(@*)]"/> </xsl:stylesheet>
second, can try strip unused whitespaces in compile-time, using:
<xsl:strip-space elements="*"/>
this way document kept in memory without insignificant whitespaces , more concise.
Comments
Post a Comment