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"
 ) 
]

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

(из http://tutorials.beginners.co.uk/professional-visual-basic-6-xml-part-1-using-xml-queries-and-transformations.htm?p=3)

Другие вопросы по тегам