xsl引用外部xsl文件

时间:2010-10-07 18:51:41

标签: xslt file external

我对xsl有疑问。我有1个巨大的xsl文件(+4000行:p),我想将文件分成不同的部分。我使用xsl文件来映射BizTalk中的一些模式,如果我将它分成几部分,它会更高效,所以我可以重新使用这些部分。无论如何,不​​介意BizTalk的东西,我如何从我的主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

3 个答案:

答案 0 :(得分:4)

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

  • 为其创建命名模板 放入EVN_EventType EVN_EventType.xsl
  • 创造另一个 命名模板 PID_PatientIdentification,你 放入PID_PatientIdentification.xsl;
  • 然后将两个样式表导入主样式表
  • 并从中调用两个模板 在<xsl:template match="/ns1:ADT_A01_231_GLO_DEF">以上。

答案 1 :(得分:2)

了解<xsl:import><xsl:include>说明。然后使用获得的知识。

答案 2 :(得分:0)

您可以通过使用主xsl中的import语句从另一个xsl导入xsl,以使用来自另一个xsl的模板匹配项(例如A.xsl)。 <xsl:import>元素具有href属性,其值是URI引用,用于标识要导入的样式表。

<xsl:import href="A.xsl"/>