引用外部XSL文件的XSL参考

3
我有一个关于xsl的问题。我有一个超过4000行的巨大的xsl文件,我想将其拆分成不同的部分。我使用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%有效的,我只是快速复制/粘贴了一些东西,但你明白我的意思吧?

非常感谢任何帮助。 谢谢


好问题(+1)。请查看我的答案,其中包含专门设计用于使用多文件XSLT转换的指令。 - Dimitre Novatchev
除了@LarsH和@Dimitre的好答案之外,您应该注意这种转换具有糟糕的设计。它只是一个恒等变换,可能带有一些被剥离或绕过的元素。这可以大大缩短! - user357812
3个回答

4

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

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

2

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接