xsl: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 Sub-Instruktion xsl:matching-substring verarbeitet in einer, durch xsl:analyze-string erzeugten, Sequenz diejenigen Substrings eines Eingabestrings, die dem zugrundeliegenden Vergleichsmuster entsprechen.

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

Position im Stylesheet und erlaubte Inhalte:

Die Sub-Instruktion xsl:matching-substring tritt als erstes Child-Element innerhalb des Templatebodies von xsl:analyze-string auf.

Erlaubter Inhalt ist ein Templatekörper in Form eines Sequenzkonstruk­tors zur Verarbeitung des übergebenen Teilstrings der durch xsl:analyze-String erzeugten Sequenz. Der Templatekörper darf aus Text, beliebigen Literal Result Elementen und XSLT-Instruktionen bestehen.

Attribute:

Für xsl:matching-substring gelten die Standardattribute. Ansonsten existieren keine elementspezifischen Attribute.

Verwendungszweck:

Die Anweisung xsl:matching-substring verar­beitet die Teilstrings, die bei Anwendung des regulären Ausdrucks von xsl:analyze-string eine Übereinstimmung (match) ergeben. Die Instruktion wird für jede im gesuchten Ausdruck gefundene Übereinstimmung in der Rei­henfolge aufgerufen, die durch die Ausgabesequenz von xsl:analyze-string bestimmt wird. Es darf jeweils maximal eine Sub-Instruktion xsl:matching-substring in xsl:analyze-string auftreten, der maximal eine Sub-Instruktion xsl:non-matching-substring sowie xsl:fallback-Elemente in beliebiger Zahl folgen dürfen.

Die Endmarke </xsl: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.)

Subpattern und die Funktion regex-group():
Werden im regulären Ausdruck von xsl:analyze-string mittels runder Klammern Subpatterns definiert, so können die dergestalt in temporäre Variablen gespeicherten Substrings des Matches mittels der Funktion regex-group() extrahiert werden, deren Signatur wie folgt lautet:

regex-group($group-number as xs:integer) as xs:string

Die Funktion nimmt Ganzzahlen als Argument entgegen, die jeweils dem Sub­pattern entsprechen: So gibt regex-group(2) den String in der temporären Variable des zweiten Subpatterns zurück.

Für einen regulären Ausdruck der Form "(\d\d)\.(\d\d)", der Folgen aus zwei, durch einen Punkt getrennten Ziffernpaaren findet, gibt die Funktion mit dem Argument 1 das erste, mit Argument 2 das zweite Ziffernpaar zurück.

Wird ein Argument übergeben, das kei­nem Subpattern entspricht (in diesem Fall beispielsweise die Zahl 3), so wird ein leerer String zurückgegeben. Das gleiche Ergebnis erhält man jedoch auch, wenn ein existierendes Subpattern einen leeren String enthält.

Außerhalb einer xsl:matching-substring-Instruktion angewendet, gibt die Funktion stets eine leere Sequenz zurück.

Beispiel – Anwendung von regex-group() in xsl:matching-substring:

Quelldokument:

<?xml version="1.0" encoding="UTF-8"?>
<beispiel>
  Ein ganz beliebiger String, 
  der die Zeichenfolge 47.11 enthält.
</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="(\d\d)\.(\d\d)">
        <xsl:matching-substring>
          <zahl1>Zahl 1: <xsl:value-of select="regex-group(1)"/></zahl1>
          <zahl2>Zahl 2: <xsl:value-of select="regex-group(2)"/></zahl2>
        </xsl:matching-substring>
        <xsl:non-matching-substring>
          <rest><xsl:value-of select="."/></rest>
        </xsl:non-matching-substring>
      </xsl:analyze-string>
    </ergebnis>
  </xsl:template>
</xsl:stylesheet>

Zwei im regulären Ausdruck definierte Subpattern eines gefundenen mat­ching-substring sollen separat ausgegeben werden.

Ergebnis:

<?xml version="1.0" encoding="UTF-8"?>
<ergebnis>
  <rest> Ein ganz beliebiger String, der die Zeichenfolge </rest>
  <zahl1>Zahl 1: 47</zahl1>
  <zahl2>Zahl 2: 11</zahl2>
  <rest> enthält.</rest>
</ergebnis>

Die beiden Teilstücke des Matches werden einzeln ausgegeben. Der die beiden Ziffernpaare im Quelldokument trennende Punkt wird verworfen.

Elementdefinition:

XSLT 1.0:

Element in XSLT 1.0 nicht verfügbar.

XSLT 2.0:

<!-- Category: sub instruction -->
<xsl:matching-substring>
   <!-- Content: sequence-constructor -->
</xsl: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