2010-10-07 80 views
3

我有一个关于xsl的问题。我有一个巨大的xsl文件(+4000行:p),我想在不同的部分分割文件。我使用xsl文件来映射BizTalk中的某些模式,如果我将它分成几部分,它将更具性能,因此我可以重新使用这些部分。无论如何,不​​介意BizTalk的东西,我怎么能从我的主要xsl文件引用到不同的部分?xsl引用外部xsl文件

例:

<?xml version="1.0" encoding="UTF-16"?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> 
     <xsl:template match="/"> 
     <xsl:apply-templates select="/ns1:ADT_A01_231_GLO_DEF" /> 
     </xsl:template> 
     <xsl:template match="/ns1:ADT_A01_231_GLO_DEF"> 
     <ns1:ADT_A01_25_GLO_DEF> 
      <EVN_EventType> 
       <xsl:if test="EVN_EventTypeSegment/EVN_1_EventTypeCode"> 
        <EVN_1_EventTypeCode> 
        <xsl:value-of select="EVN_EventTypeSegment/EVN_1_EventTypeCode/text()" /> 
        </EVN_1_EventTypeCode> 
       </xsl:if> 
       <EVN_2_RecordedDateTime> 
        <xsl:if test="EVN_EventTypeSegment/EVN_2_RecordedDateTime/TS_0_TimeOfAnEvent"> 
        <TS_0_Time> 
         <xsl:value-of select="EVN_EventTypeSegment/EVN_2_RecordedDateTime/TS_0_TimeOfAnEvent/text()" /> 
        </TS_0_Time> 
        </xsl:if> 
        <xsl:if test="EVN_EventTypeSegment/EVN_2_RecordedDateTime/TS_1_DegreeOfPrecision"> 
        <TS_1_DegreeOfPrecision> 
         <xsl:value-of select="EVN_EventTypeSegment/EVN_2_RecordedDateTime/TS_1_DegreeOfPrecision/text()" /> 
        </TS_1_DegreeOfPrecision> 
        </xsl:if> 
       </EVN_2_RecordedDateTime> 
      </EVN_EventType> 
      <PID_PatientIdentification> 
      <xsl:if test="PID_PatientIdentificationSegment/PID_1_SetIdPid"> 
       <PID_1_SetIdPid> 
       <xsl:value-of select="PID_PatientIdentificationSegment/PID_1_SetIdPid/text()" /> 
       </PID_1_SetIdPid> 
      </xsl:if> 
      </PID_PatientIdentification> 
     </ns1:ADT_A01_25_GLO_DEF> 
     </xsl:template> 
    </xsl:stylesheet> 

所以我想就把“EVN_EventType”和“PID_PatientIdentification”在另一个文件中。 可能是因为这个xsl不是100%有效的,我很快就复制/粘贴了一些东西,但是你明白了我的观点?

非常感谢任何帮助。 Thx

+0

好问题(+1)。请参阅我的答案,以获取专门针对使用多文件XSLT转换而设计的xslt指令, – 2010-10-07 18:59:35

+0

除了@LarsH和@Dimitre的良好答案之外,您应该注意,此转换的设计很糟糕。这只是一种身份转换,可能带有一些剥离或绕过的元素。这可能会更短! – 2010-10-07 20:29:55

回答

4

在样式表的顶层使用<xsl:import>来从其他样式表导入模板。您可以:

  • 创建一个名为模板 EVN_EventType,把它放在 EVN_EventType.xsl
  • 创建 PID_PatientIdentification,你 放于PID_PatientIdentification.xsl另一 命名模板;
  • 然后将两个样式表导入到您的主样式表中
  • 并在上面的<xsl:template match="/ns1:ADT_A01_231_GLO_DEF">范围内调用 中的两个模板。