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

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

windows - Python Service Installation - "Could not find PythonClass entry" -

Determine if a XmlNode is empty or null in C#? -