Форматирование XSLT для добавления * в число

Вопрос или проблема

Довольно нов в формате XSLT и пытаюсь получить 2 числа на основе 1 ввода. Я пробовал несколько вариантов, и ничего не работает. Пусть предположим, что он получает 8989 из telephoneNumber, так как это связано с LDAP. Я хочу одно значение как 8989, что я получаю. Мне нужно другое значение, которое равняется 8*989, так что файл XSLT должен вставить * как вторую цифру. Любая помощь будет очень признательна!

Для одного вывода это работает:

    <Extension>
        <xsl:value-of select="telephonenumber"/>
    </Extension>

Так что для многократного вывода я полагаю, мне нужно следующее с адаптацией числа, чтобы включить * там, где #*###?

    <xsl:for-each select="telephoneNumber">
    <Extension>
        <xsl:value-of select="."/>
        <xsl:value-of select="#*###"/>
        </Extension>
    </xsl:for-each>

Спасибо,
Scutch

Ответ или решение

Конечно, давайте подробно рассмотрим, как вы можете отформатировать XSLT для обработки телефонного номера с целью вставки символа * в нужную позицию.

Анализ проблемы

Вы хотите получить два разных формата телефонного номера. Первый формат – это базовый номер без изменений, например, 8989, и второй формат – с добавлением символа * после первой цифры, т.е. 8*989. Это может быть выполнено с помощью XSLT, используя конструкции обработки строк, такие как substring и конкатенацию.

Решение

Для достижения вашей цели нам нужно будет модифицировать ваш исходный XSLT код. Приведенный ниже пример решения покажет, как создать два выхода на основании одного входного номера.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <Root>
            <xsl:for-each select="telephoneNumber">
                <Extension>
                    <!-- Первое значение - оригинальный номер -->
                    <xsl:value-of select="."/>
                </Extension>
                <Extension>
                    <!-- Второе значение - номер с добавленным '*' -->
                    <xsl:value-of select="concat(substring(., 1, 1), '*', substring(., 2))"/>
                </Extension>
            </xsl:for-each>
        </Root>
    </xsl:template>
</xsl:stylesheet>

Объяснение кода

  1. Операторы for-each и template: Мы используем <xsl:for-each> для обработки каждого номера телефона, который мы получаем из вашего XML. Шаблон <xsl:template match="/"> указывает, с какого узла начинается преобразование.

  2. Первое значение:

    • <xsl:value-of select="."/> просто выводит само значение телефонного номера.
  3. Второе значение:

    • Используется функция concat для объединения строк. Она соединяет первую цифру substring(., 1, 1), символ * и оставшуюся часть номера substring(., 2).
    • substring(., 1, 1) берет только первый символ номера.
    • substring(., 2) берет все символы начиная со второго до конца.

Заключение

Использование XSLT для модификации строк — это мощный инструмент, позволяющий легко адаптировать данные в соответствии с требованиями. В этом примере мы показали, как можно добиться необходимого формата телефонного номера. Убедитесь, что ваш фактический XML-документ корректно структурирован для применения данного XSLT, и протестируйте результаты с реальными данными.

Если у вас возникнут дополнительные вопросы или потребуется более сложная обработка данных, не стесняйтесь обратиться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...