XSLT/XPath: в MSXML 4.0 нет функции верхнего регистра?
Я пытаюсь использовать верхний регистр () в XPATH, мой парсер MSXML 4.0, и я получаю:
upper-case is not a valid XSLT or XPath function.
Это действительно не реализовано?
2 ответа
В xslt 1.0 нет функций для преобразования в верхний или нижний регистр. Вместо этого сделайте следующее:
Если это требуется во многих местах:
Объявите эти две переменные xsl (чтобы сделать xslt более читабельным)
<!-- xsl variables up and lo and translate() are used to change case -->
<xsl:variable name="up" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="lo" select="'abcdefghijklmnopqrstuvwxyz'"/>
И используйте их в своей функции перевода, чтобы изменить регистр
<xsl:value-of select="translate(@name,$lo,$up)"/>
Если вам нужно использовать его только в одном месте, не нужно объявлять переменные
<xsl:value-of select="translate(@name,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
Может быть, это может помочь вам:
translate(string, string, string)
Функция перевода принимает строку и, посимвольно, переводит символы, которые соответствуют второй строке, в соответствующие символы в третьей строке. Это единственный способ преобразовать нижний регистр в XPath. Это будет выглядеть так (с дополнительным пробелом, добавленным для удобства чтения). Этот код переведет фамилии сотрудников в верхний регистр, а затем выберет тех сотрудников, чьи фамилии начинаются с A.
descendant::employee[
starts-with(
translate(@last-name,
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
"A"
)
]
Если вторая строка содержит больше символов, чем третья строка, эти дополнительные символы будут удалены из первой строки. Если третья строка содержит больше символов, чем вторая строка, дополнительные символы игнорируются.