xsl:non-matching-substring

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 6.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

 

Die Instruktion xsl:non-matching-substring dient bei der Verarbeitung einer durch xsl:analyze-string erzeugten Sequenz dazu, diejenigen Substrings eines Eingabestrings zu verarbeiten, die nicht dem verwendeten Vergleichsmuster entsprechen.

Klassifizierung Sub-Instruktion
Funktionsgruppe Testen von Stringwerten
Einführung XSLT 2.0

Position im Stylesheet und erlaubte Inhalte:

Die Sub-Instruktion xsl:non-matching-subst­ring tritt als zweites Child-Element innerhalb des Templatebodies von xsl:analyze-string auf.

Das Element enthält einen Sequenzkonstruk­tors zur Verarbeitung des übergebenen Teilstrings der in xsl:analyze-string erzeugten Sequenz. Der Templatekörper darf aus Text, beliebigen Literal Result Elements und XSLT-Instruktionen bestehen.

Attribute:

Es gelten lediglich die Standardattribute. xsl:non-matching-subst­ring besitzt keine elementspezifischen Attribute.

Verwendungszweck:

Die Anweisung xsl:non-matching-substring verarbeitet diejenigen Teil­strings eines Eingabestrings, die bei Anwendung des regulären Ausdrucks von xsl:analyze-string keine Übereinstimmung (match) ergeben. Die Instruktion wird für jeden dieser Teilstrings in der Rei­henfolge aufgerufen, die durch ihr Auftreten in der Ausgabesequenz von xsl:analyze-string bestimmt wird. Es darf jeweils maximal eine Sub-Instruktion xsl:non-matching-substring in xsl:analyze-string auftreten, der maximal eine Sub-Instruktion xsl:matching-substring vorangeht sowie xsl:fallback-Elemente in beliebiger Zahl folgen dürfen.

Die Endmarke </xsl:non-matching-substring> muss stets gesetzt werden. Eine abge­kürzte Schreibweise ist, auch bei eigentlich leerem Templateinhalt, nicht erlaubt. (In diesem Fall ist es jedoch gestattet, das Element im Inhalt von xsl:analyze-string vollständig wegzulas­sen.)

Da die lexikalische Form eines nicht passenden Teilstrings in der Regel nicht vorherbestimmbar ist, wird man sich meist darauf beschränken, ihn entweder zu verwerfen (mittels einer leeren oder unterlassenen xsl:non-matching-substring-Instruktion) oder ohne Änderung weiterzureichen.

Beispiel – Anwendung von xsl:non-matching-substring:

Quelldokument:

<?xml version="1.0" encoding="UTF-8"?>
<beispiel>Fischsuppe enthält Fisch.</beispiel>

Stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:template match="/">
    <ergebnis>
      <xsl:analyze-string select="beispiel" regex="Fisch">
        <xsl:matching-substring><em>Karotten</em></xsl:matching-substring>
        <xsl:non-matching-substring>
          <xsl:value-of select="."/>
        </xsl:non-matching-substring>
      </xsl:analyze-string>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

Der Matching-Substring wird ausgetauscht und mit <em>-Tags umgeben, der Non-matching-Substring mittels xsl:value-of unverändert durchgereicht.

Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
  <em>Karotten</em>suppe enthält <em>Karotten</em>.
</ergebnis>

Elementdefinition:

XSLT 1.0:

Element in XSLT 1.0 nicht verfügbar.

XSLT 2.0:

<!-- Category: sub-instruction -->
<xsl:non-matching-substring>
   <!-- keine Attribute -->
   <!-- Content: sequence-constructor -->
</xsl:non-matching-substring>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn