2010-10-07 9 views
3

J'ai une question à propos de xsl. J'ai 1 énorme fichier xsl (+4000 lignes: p) et je voudrais diviser le fichier en différentes parties. J'utilise le fichier xsl pour mapper certains schémas dans BizTalk et ce serait plus performant si je le divisais en parties, donc je peux réutiliser les parties. Quoi qu'il en soit, ne me dérange pas les trucs BizTalk, comment puis-je faire référence à partir de mon fichier xsl principal pour les différentes parties?xsl référence au fichier xsl externe

ex .:

<?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> 

Alors je voudrais mettre le "EVN_EventType" et le "PID_PatientIdentification" dans un autre fichier. Pourrait être que ce xsl n'est pas valide à 100%, j'ai rapidement copier/coller quelque chose, mais vous obtenez mon point?

Appréciez grandement toute aide. Thx

+0

Bonne question (+1). Voir ma réponse pour les instructions xslt qui sont spécialement conçues dans le but d'utiliser des transformations XSLT multi-fichiers, –

+0

Outre les bonnes réponses de @LarsH et @Dimitre, vous devriez noter que cette transformation a un mauvais design. C'est juste une transformation d'identité avec probablement des éléments dépouillés ou contournés. Cela pourrait être beaucoup plus court! –

Répondre

4

Utilisez <xsl:import> au niveau supérieur de la feuille de style pour importer des modèles à partir d'autres feuilles de style. Vous pouvez:

  • créer un modèle nommé pour EVN_EventType, le mettre dans EVN_EventType.xsl
  • créer un autre modèle nommé pour PID_PatientIdentification, que vous mis en PID_PatientIdentification.xsl;
  • puis importer les deux feuilles de style dans votre feuille de style principale
  • et appellent les deux modèles de au sein de votre <xsl:template match="/ns1:ADT_A01_231_GLO_DEF"> ci-dessus.