Как найти ++ (двойной плюс) в строке и заменить на + (один) с помощью XSLT? - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно удалить двойной ++ из строки с одним +, используя XSLT.

Например: ++31646331175: мне нужно вывести это значение как + 31646331175.

Если есть только один плюс или нет плюса вообще, то полностью игнорировать строку.

1 Ответ

0 голосов
/ 08 апреля 2019

Вы можете сделать это с помощью функции XSLT-2.0 analyze-string.
Таким образом, следующий код XSLT может сделать эту работу:

Входной XML:

<root>
    <str>++0049134-343-285</str>
    <str>+00421335-645-784</str>
    <str>49134543-346-283</str>
    <str>++0042134-347-282</str>
    <str>++0041134-349-282</str>
</root>

Обработка файла XSLT-2.0:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes" />
    <xsl:strip-space elements="*" />

    <xsl:template match="/root/str">
        <xsl:analyze-string select="text()" regex="\+(\+.*)">
            <xsl:matching-substring>
                <xsl:value-of select="regex-group(1)"/><xsl:text>&#xa;</xsl:text>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:template>

</xsl:stylesheet>

Вывод:

+0049134-343-285
+0042134-347-282
+0041134-349-282

Другая комбинация шаблонов может быть следующей с использованием функции matches:

<xsl:template match="text()" />

<xsl:template match="str[matches(text(),'^\+\+[^+]+')]">
  <xsl:value-of select="substring-after(text(),'+')"/><xsl:text>&#xa;</xsl:text>
</xsl:template>

Это выражение является еще более точным, поскольку оно исключает строки с тремя + или более в начале строки. Я надеюсь, что этого достаточно для ваших нужд.

...