Freigeben über


<xsl:preserve-space>-Element

Behält Textknoten bei, die nur Leerraum enthalten, die in diesen Elementen enthalten sein können, wie vom elements-Attribut angegeben.

<xsl:preserve-space
  elements = tokens />

Attribute

  • elements
    Dies ist ein erforderliches Attribut. Der Wert ist eine durch Leerraum getrennte Liste von Namentokens für die Knoten, deren Leerraum-Textknoten beibehalten werden müssen.

Elementinformationen

Anzahl der Vorkommen

Unbegrenzt

Übergeordnete Elemente

xsl:stylesheet, xsl:transform

Untergeordnete Elemente

(Keine untergeordneten Elemente)

Hinweise

Das <xsl:preserve-space>-Element behält Leerraum-Textknoten in den angegebenen Elementen bei. Dies wirkt sich nicht auf Leerraumzeichen in Textknoten aus, die sowohl Leerraumzeichen als auch andere Zeichen enthalten. Die Beibehaltung von Leerraum-Textknoten bedeutet an dieser Stelle, dass die Knoten aus dem Quelldokument im Ergebnisdokument erhalten bleiben. <xsl:strip-space> bewirkt das Gegenteil. Die Leerraum-Textknoten werden in den angegebenen Knoten entfernt.

Standardmäßig werden alle Leerraum-Textknoten beibehalten. Wenn ein Elementname einem Namenstest in einem <xsl:strip-space>-Element entspricht, wird er aus der Gruppe der Elementnamen entfernt, für die Leerraum beibehalten werden soll. Wenn ein Elementname einem Namenstest in einem <xsl:preserve-space>-Element entspricht, wird er wieder der Gruppe von Elementnamen hinzugefügt, für die Leerraum beibehalten werden soll.

Weitere Informationen finden Sie unter "Whitespace Stripping", Abschnitt 3.4 der XSLT-Empfehlung der W3C unter www.w3.org/TR/xslt (nur in englischer Sprache).

Beispiel

Im folgenden Beispiel wird erläutert, welche Auswirkungen das Beibehalten und Entfernen von Leerraum-Textknoten mithilfe von <xsl:preserve-space> und <xsl:strip-space> hat.

XML-Datei (source.xml)

<?xml version="1.0"?>
<document>
<text>   </text>
<text>  ;</text>
<text>
This is a   sample text 
    
</text>
<code>   </code>
<code>  ;</code>
<code>
This is a   sample code 
    
</code>
</document>

XSLT-Datei (trans.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <!-- 
     The following xsl:preserve-space is not necessary.
     It is included to emphasize the fact that white-space-only
     text nodes are to be preserved on the <code> elements.
   -->
  <xsl:preserve-space elements="code"/>
  <xsl:strip-space elements="text"/>

  <xsl:template match="/">
    code elements:
    <xsl:apply-templates select="//code"/>

    text elements:
    <xsl:apply-templates select="//text"/>
  </xsl:template>

  <xsl:template match="text">
     text # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>
  

  <xsl:template match="code">
     code # <xsl:value-of select="position()"/>
     has <xsl:value-of select="count(text())"/> text(). 
     "<xsl:value-of select="translate(.,' &#10;&#13;&#9;', '-NRT')"/>"
  </xsl:template>

</xsl:stylesheet>

Probieren Sie es aus!

  1. Kopieren Sie den oben stehenden Code, und speichern Sie ihn in entsprechenden Dateien auf dem lokalen Laufwerk.

  2. Starten Sie die XSL-Transformation, indem Sie das Kommandozeilendienstprogramm zur Transformation (msxsl.exe) an einer Eingabeaufforderung folgendermaßen aufrufen:

    msxsl source.xml trans.xsl

    Wichtig

    Starten Sie die Transformation nicht aus Internet Explorer. Der Browser führt Operationen zum Entfernen von Leerraum aus, die nicht mit dem XSLT-Spezifikationen kompatibel sind. Dies kann dazu führen, dass die XLST-Transformation nicht erwartungsgemäß erfolgt.

Ausgabe

Dies ist die Standardausgabe:

code elements:

code # 1

has 1 text().

"---"

code # 2

has 1 text().

"--;"

code # 3

has 1 text().

"NThis-is-a-Tsample-codeTNTN"

text elements:

text # 1

has 0 text().

""

text # 2

has 1 text().

"--;"

text # 3

has 1 text().

"NThis-is-a-Tsample-textTNTN"

Beachten Sie, dass die Transformation nur einen Textknoten für das erste <code>-Element zurückgibt. Es wird jedoch kein Textknoten für das erste <text>-Element zurückgegeben. Dies liegt daran, dass diese Elemente beide über einen Leerraum-Textknoten verfügen, der in <code> erhalten, in <text> jedoch entfernt wird. Dies entspricht der <xsl:preserve-space>-Anweisung und der <xsl:strip-space>-Anweisung, die am Anfang des Stylesheets aufgeführt sind. Das zweite und das dritte Element zeigen jeweils, dass diese Anweisungen keine Auswirkungen auf Textknoten haben, bei denen es sich nicht um Leerraum-Textknoten handelt.

Siehe auch

Verweis

<xsl:strip-space>-Element