xslマッパーのパフォーマンスに問題があります。 はここにいくつかの例のXSL(注:実際のXSLは10の000行のために、このようになります)されxslパフォーマンスの問題
<?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>
だから私がやっていることは次のとおりです。
- I copy the nodes I want from the source xml
- I don't copy the empty nodes or the nodes that contain a break (hence why I check normalize-space(/text())
は今すぐ実行時間は約1秒ですこれは正常ですか?私はこのマッピングを通常1秒間に少なくとも10個のメッセージを処理できるビズトークで使用しますが、このマップは遅延を引き起こしているので、1秒間に1メッセージしか処理できません:(
今私は残念ながらありませんXSLの第一人者、誰もが私にいくつかのアドバイスを与えることができる場合ので、それは大歓迎です:)
Thxを
ソースメッセージのサイズは、実行時間を決定する主な要因になります。また、実行時間をどのように測定しているのかも言わないでください - XML解析時間も含めていますか?実行時間がソース文書サイズで直線的に変化するのか、それとも二倍に変化するのか、つまりサイズが倍増すると経過時間が2倍か4倍か悪化するかどうかを確認することで、有用な診断を得ることができます。二次関数の場合は、xsl:keyを賢明に使用して問題を解決することができます。 –
あなたの質問に実際には触れていませんが。パフォーマンス、いくつかの 'かわいい'再帰的なXSLTのテンプレートマッチングアルゴリズムは、一般的に空のノードを取り除く - これはあなたに多くのコードを保存する可能性がありますか?例えばhttp://www.stylusstudio.com/xsllist/200403/post50690.html – StuartLC
整形式のXMLを投稿することはできますか?私はあなたのコードを適切にフォーマットすることさえできず、それを分析して理解することについては話しません。 –