XSLT / XPath: в MSXML 4.0 нет функции верхнего регистра? - PullRequest
4 голосов
/ 04 августа 2009

Я пытаюсь использовать верхний регистр () в XPATH, мой парсер MSXML 4.0, и я получаю:

upper-case is not a valid XSLT or XPath function.

Разве это не реализовано?

Ответы [ 2 ]

13 голосов
/ 04 августа 2009

В 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')"/>
2 голосов
/ 04 августа 2009

Может быть, это может помочь вам:

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)

...