xsl 매퍼의 성능에 문제가 있습니다.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 초입니다 : 여기에 몇 가지 예를 들어, XSL (실제 XSL 10 000 선에 대해 다음과 같이 계속 주)입니다 이게 정상인가요? 나는이 맵핑을 일반적으로 초당 10 개 이상의 메시지를 처리 할 수있는 biztalk에서 사용하지만이 맵은 지연을 일으키므로 초당 1 개의 메시지 만 처리 할 수 있습니다. (
누군가가 나에게 조언을 줄 수있는, 그래서 만약 아니라 XSL 전문가 불행히도, 내가 노드를 복사
원본 메시지가 어떤 크기인지는 알지 못합니다. 실행 시간을 결정하는 주요 요인이 될 것입니다. 실행 시간을 측정하는 방법에 대해서도 말하지 않고 XML 파싱 시간을 포함하고 있습니까? 실행 시간이 원본 문서 크기에 따라 선형 적으로 (즉) 2 차원 적으로 변하는 지 여부를 확인하여 유용한 진단을 얻을 수 있습니다. 즉, 크기가 두 배로 늘어나면 경과 시간이 2 배나 4 배나 악화됩니까? 2 차적이라면 xsl : key를 현명하게 사용하여 문제를 해결할 수 있습니다. –
귀하의 질문에 실제로 답변하지는 않지만. 성능, 빈 노드를 제거하기위한 '귀여운'반복적 인 XSLT 템플릿 매칭 알고리즘이 있습니다. 이렇게하면 많은 코딩을 줄일 수 있습니다. 예 : http://www.stylusstudio.com/xsllist/200403/post50690.html – StuartLC
잘 작성된 XML을 게시 하시겠습니까? 필자는 코드를 올바르게 형식화 할 수 없으며이를 분석하고 이해하는 것에 대해 말하지 않습니다. –