<xsl:matching-substring> XSLT

Become a Patron!

Элемент xsl:matching-substring определяет, что делать при совпадении регулярного выражения в строке. Регулярное выражение определяется в атрибуте regex элемента <xsl:analyze-string>, содержащего элемент <xsl:matching-substring>.

Элементы-родители:

Синтаксис

XSLT 2.0 и XSLT 3.0

<xsl:matching-substring>
    <!-- Content: sequence-constructor -->
</xsl:matching-substring>

Описание и примеры

Пример

В примере использования элемента <xsl:analyze-string> регулярное выражение преобразует телефонные номера в формате 999-999-9999 в номера в формате +1 (999) 999-9999:

<?xml version="1.0" encoding="utf-8"?>
<!-- analyze-string1.xsl -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text"/>
    <xsl:template match="/">
        <xsl:for-each select="phonelist/phonenumber">
            <xsl:analyze-string select="." regex="([0-9]{{3}})-([0-9]{{3}})-([0-9]{{4}})">
                <xsl:matching-substring>
                    <xsl:text>&#xA;+1 (</xsl:text>
                    <xsl:value-of select="regex-group(1)"/>
                    <xsl:text>) </xsl:text>
                    <xsl:value-of select="regex-group(2)"/>
                    <xsl:text>-</xsl:text>
                    <xsl:value-of select="regex-group(3)"/>
                </xsl:matching-substring>
            </xsl:analyze-string>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

В таблице стилей используется регулярное выражение ([0-9]{{3}})-(p{{Nd}}{{3}})-([0-9]{{4}}). Оно создает три группы, заключенные в круглые скобки. (Каждая пара скобок соответствует одной группе.) Таблица стилей применяется к списку телефонных номеров:

<?xml version="1.0" encoding="utf-8"?>
<!-- phonelist.xml -->
<phonelist>
    <phonenumber>919-555-1212</phonenumber>
    <phonenumber>(919) 555-1212</phonenumber>
    <phonenumber>212.555.1212</phonenumber>
    <phonenumber>617-555-1212</phonenumber>
    <phonenumber>+86 555-1212</phonenumber>
</phonelist>

Результат выглядит так:

+1 (919) 555-1212
+1 (617) 555-1212

Из пяти телефонных номеров исходного документа только два совпали с регулярным выражением. В рассмотренном примере <xsl:analyze-string> содержит только элемент <xsl:matching-substring>, но элемент <xsl:analyze-string> может также содержать элемент <xsl:non-matching-substring>.

См. также