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