Domanda

Ho un foglio di stile xslt con più xsl:imports e voglio unirli tutti in un unico file xslt.

Si tratta di una limitazione del sistema che stiamo utilizzando, dove passa di tutto il foglio di stile xsl come un oggetto stringa memorizzata nella memoria.Questo viene trasmesso al computer remoto in cui si effettua la trasformazione.In quanto non viene caricato dal disco href link sono rotti, quindi abbiamo bisogno di rimuovere il xsl:imports dal foglio di stile.

Ci sono strumenti di là fuori che può fare questo?

È stato utile?

Soluzione

È possibile utilizzare un foglio di stile XSL per unire i fogli di stile.Tuttavia, questo è equivalente all'utilizzo dell'xsl:includere l'elemento, non xsl:import (come Azat Razetdinov ha già sottolineato).È possibile leggere la differenza qui.

Pertanto, si dovrebbe prima di sostituire il file xsl:import con xsl:include, risolvere eventuali conflitti e verificare se è ancora ottenere i risultati corretti.Dopo di che, è possibile utilizzare il seguente foglio di stile per unire i fogli di stile esistenti in uno.Basta applicarlo al vostro master foglio di stile:

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">

<xsl:template match="xsl:include">
  <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Il primo modello sostituisce tutti xsl:include con i fogli di stile utilizzando la funzione documento, che legge il file a cui fa riferimento l'attributo href.Il secondo modello è identità di trasformazione.

Ho provato con Xalan e sembra funzionare bene.

Altri suggerimenti

È possibile includere importati stylsheets nel file principale senza rompere importazione di precedenza.Per esempio, è possibile definire un livello superiore variabile in un foglio di stile importati e ridefinire nelle file principale.Se si uniscono i due file in uno, otterrete due variabili con lo stesso nome e l'importazione di precedenza, che si tradurrà in un errore.

La soluzione è di due sostituire il file xsl:import con xsl:includere e risolvere eventuali conflitti.Dopo che sei sicuro di sostituire xsl:istruzioni fornite con il corrispondente file di contenuto, perché questo è ciò che XSLT-processore:

L'inclusione di opere a struttura XML livello.La risorsa dal valore per l'attributo href è analizzato come un documento XML, e i figli di xsl:stylesheet elemento in questo documento sostituire il file xsl:includere l'elemento in compreso il documento.Il fatto che il modello di regole o definizioni sono inclusi non influisce sul modo in cui vengono elaborati.

Un Manuale di unione è probabilmente andando a essere l'opzione migliore.

La considerazione principale è quello di assicurarsi che la logica per modelli corrispondenti opere in combinato foglio di stile.

Perché si vuole?Di solito sono separati per un motivo dopotutto (spesso manutenibilità)

Si può sempre scrivere il merge di te - read file XSL, selezionare il modello di oggetti a cui sei interessato e scrivere un nuovo master file XSL...

 import multiple xsl in single xsl

      <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/>
      <xsl:apply-imports/>

<calypso:keyword>
                <calypso:name>DisplayOptionStyle</calypso:name>
<calypso:value>Vanilla</calypso:value>
</calypso:keyword>

           <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/>
           <xsl:apply-imports/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top