Share via


Beispiel 1 für <xsl:apply-imports>

In diesem Beispiel wird gezeigt, wie mithilfe von <xsl:apply-imports> Code auf effizientere Weise erneut verwendet werden kann. In diesem Beispiel werden vier Hauptdateien verwendet:

  • Die XML-Quelldatei ops.xml. Mit dieser Datendatei werden drei Vorgänge definiert: add (+), sub (-) und mul (*).

  • Das XSLT-Hauptstylesheet ops.xsl. In dieser Datei sind die Vorlagenregeln für die Vorgänge enthalten, darunter zwei <xsl:import>-Elemente. Mithilfe der importierten Stylesheets werden für eine angegebene Datenquelle arithmetische Operationen und Zeichenfolgenoperationen ausgeführt.

  • Ein importiertes Stylesheet arith.xsl. Diese XSLT-Datei führt für jedes <op>-Element arithmetische Operationen aus.

  • Ein weiteres importiertes Stylesheet str.xsl. Diese XSLT-Datei führt benutzerdefinierte Zeichenfolgenoperationen aus. Dabei wird add (+) als Zeichenfolgenverkettung behandelt, z. B. wird 1+2 zu 12. In ähnlicher Weise wird mul (*) als umgekehrte Verkettung behandelt. So wird 1*2 zu 21. Beachten Sie, dass sub (-) eine nicht definierte Zeichenfolgenoperation ist.

XML-Datei (ops.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ops.xsl"?>
<ops>
  <desc>Some binary operations</desc>
  <op name="add" symbol="+">
    <operand>1</operand>
    <operand>2</operand>
  </op>
  <op name="sub" symbol="-">
    <operand>1</operand>
    <operand>2</operand>
  </op>
  <op name="mul" symbol="*">
    <operand>1</operand>
    <operand>2</operand>
  </op>
</ops>

XSLT-Hauptdatei (ops.xsl)

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">
  <xsl:import href="arith.xsl"/>
  <xsl:import href="str.xsl"/>
  <xsl:template match="op">
    <xsl:value-of select="operand[1]"/>
    <xsl:value-of select="@symbol"/>
    <xsl:value-of select="operand[2]"/>
    = <xsl:apply-imports/>
    <br/>
  </xsl:template>
</xsl:stylesheet>

Importierte XSLT-Datei (arith.xsl)

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">
  <xsl:template match="op[@symbol='+']">
    <xsl:value-of select="sum(operand)"/> (from arith.xsl)
  </xsl:template>
  <xsl:template match="op[@symbol='-']">
    <xsl:value-of select="number(operand[1])-number(operand[2])"/> 
   (from arith.xsl)
  </xsl:template>
  <xsl:template match="op[@symbol='*']">
    <xsl:value-of select="number(operand[1])*number(operand[2])"/> 
    (from arith.xsl)
  </xsl:template>
</xsl:stylesheet>

Importierte XSLT-Datei (str.xsl)

<?xml version="1.0"?>
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                  version="1.0">
  <xsl:template match="desc">
    <DIV><xsl:value-of select="."/></DIV>
  </xsl:template>
  <xsl:template match="op[@name='add']">
    <xsl:value-of select="operand[1]"/>
    <xsl:value-of select="operand[2]"/> (from str.xsl)
  </xsl:template>
  <xsl:template match="op[@name='mul']">
    <xsl:value-of select="operand[2]"/>
    <xsl:value-of select="operand[1]"/> (from str.xsl)
  </xsl:template>
</xsl:stylesheet>

Ausgabe

Die folgende Ausgabe wird angezeigt:

Some binary operations

1+2 = 12 (from str.xsl)

1-2 = -1 (from arith.xsl)

1*2 = 21 (from str.xsl)

Hinweise

Das zuletzt importierte Stylesheet weist die höchste Importpriorität auf. In diesem Beispiel wurde zuletzt str.xsl importiert und weist daher eine höhere Importpriorität als arith.xsl auf. In den beiden importierten Stylesheets sind Vorlagen für die Operationen add und mul enthalten. Es werden jedoch nur die Vorlagen für str.xsl aufgerufen. Dennoch wird die in arith.xsl definierte sub-Operation verwendet, da in str.xsl keine sub-Operation definiert ist. Angenommen, die Reihenfolge der <xsl:import>-Elemente in der Haupt-XSLT-Datei wird wie folgt umgekehrt:

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

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

In diesem Fall erhalten Sie die folgende Ausgabe:

Some binary operations

1+2 = 3 (from arith.xsl)

1-2 = -1 (from arith.xsl)

1*2 = 2 (from arith.xsl)

Wenn die <xsl:apply-imports/>-Anweisung der überschreibenden Vorlagenregel für <op> in der XSLT-Hauptdatei (ops.xsl) fehlt, wird außerdem Folgendes ausgegeben:

Some binary operations

1+2 =

1-2 =

1*2 =

Das bedeutet, dass die Vorlagenregel im zu importierenden Stylesheet die zugehörigen Vorlagenregeln in den importierten Stylesheets übeschreibt. Mithilfe der <xsl:apply-imports/>-Anweisung können Sie diese überschriebenen Vorlagenregeln in anderer Weise reaktivieren.