Вопрос или проблема
Довольно нов в формате 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>
Объяснение кода
-
Операторы
for-each
иtemplate
: Мы используем<xsl:for-each>
для обработки каждого номера телефона, который мы получаем из вашего XML. Шаблон<xsl:template match="/">
указывает, с какого узла начинается преобразование. -
Первое значение:
<xsl:value-of select="."/>
просто выводит само значение телефонного номера.
-
Второе значение:
- Используется функция
concat
для объединения строк. Она соединяет первую цифруsubstring(., 1, 1)
, символ*
и оставшуюся часть номераsubstring(., 2)
. substring(., 1, 1)
берет только первый символ номера.substring(., 2)
берет все символы начиная со второго до конца.
- Используется функция
Заключение
Использование XSLT для модификации строк — это мощный инструмент, позволяющий легко адаптировать данные в соответствии с требованиями. В этом примере мы показали, как можно добиться необходимого формата телефонного номера. Убедитесь, что ваш фактический XML-документ корректно структурирован для применения данного XSLT, и протестируйте результаты с реальными данными.
Если у вас возникнут дополнительные вопросы или потребуется более сложная обработка данных, не стесняйтесь обратиться за помощью.