Frage

Ich habe ein XSLT-Stylesheet mit mehreren xsl:imports und ich möchte sie alle in die eine XSLT-Datei verschmelzen.

Es ist eine Beschränkung des Systems wir verwenden, wo es als String-Objekt um das XSL-Stylesheet übergibt im Speicher abgelegt. Dies wird auf Remote-Computer übertragen, wo es um die Transformation durchführt. Da es nicht von der Festplatte werden die href Links gebrochen, geladen wird, so müssen wir die xsl:imports aus dem Stylesheet entfernen.

Gibt es irgendwelche Werkzeuge gibt, die dies tun können?

War es hilfreich?

Lösung

Sie können einen XSL-Stylesheet verwenden, um Ihre Sheets zu fusionieren. Dies ist jedoch gleichbedeutend mit der Verwendung von XSL: include Element, nicht xsl: Import (wie Azat Razetdinov bereits ausgeführt hat). Sie können auf der Differenz lesen hier .

Import der mit xsl:

Daher sollten Sie zunächst die xsl ersetzen sind die, Konflikte lösen und testen, ob Sie noch die richtigen Ergebnisse erzielen. Danach könnten Sie das folgende Stylesheet verwenden, um Ihre vorhandenen Sheets zu einem verschmelzen. wenden Sie es einfach in Ihrem Master Sheet:

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

Die erste Vorlage ersetzt alle xsl: include ist mit den mitgelieferten Stylesheets durch die Dokument-Funktion verwenden, die in der Datei im href-Attribut verwiesen liest. Die zweite Vorlage ist die Identitätstransformation .

Ich habe es mit Xalan getestet und es scheint gut zu funktionieren.

Andere Tipps

Es ist unmöglich, importiert stylsheets in die Hauptdatei enthalten, ohne zu brechen Vorrang importieren . Zum Beispiel definieren Sie ein Top-Level-Variable in einem importierten Stylesheet und neu zu definieren es in der Hauptdatei. Wenn Sie zwei Dateien zu einer Einheit verschmelzen, werden Sie zwei Variablen mit dem gleichen Namen und Importpriorität erhalten, die zu einem Fehler führen wird.

Die Abhilfe ist zwei xsl ersetzen: Import der mit xsl: include ist und lösen alle Konflikte . Danach können Sie sicher sind xsl zu ersetzen: include Anweisungen mit den entsprechenden Dateiinhalte, denn das ist, was XSLT-Prozessor tut :

  

Die Einbeziehung arbeitet in der XML-Struktur-Ebene. Die Ressource durch den href Attribut-Wert befindet sich als XML-Dokument analysiert, und die Kinder des xsl: stylesheet Elements in diesem Zusammenhang die xsl Dokument ersetzen: include Elements im einschließlich Dokument. Die Tatsache, dass Template-Regeln oder Definitionen enthalten sind, keinen Einfluss auf die Art, wie sie verarbeitet werden.

Eine manuelle Zusammenführung ist wahrscheinlich die beste Option sein.

Die Hauptüberlegung wird wahrscheinlich sein, um sicherzustellen, dass die Logik für die passenden Vorlagen im kombinierten Sheet funktioniert.

Warum würden Sie wollen? Sie sind in der Regel aus einem Grund getrennt afterall (oft Wartbarkeit)

Sie könnten immer schreiben die selbst fusionieren - lesen Sie die XSL-Dateien in, wählen Sie die Vorlage Artikel, die Sie interessiert sind und zu einem neuen Master-XSL-Datei schreiben ...

 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/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top