XSLT / XPath:MSXML 4.0中没有大写字母功能?

时间:2009-08-04 08:16:46

标签: xslt xpath uppercase msxml4

我尝试在XPATH中使用大写(),我的解析器是MSXML 4.0,我得到:

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

它真的没有实现吗?

2 个答案:

答案 0 :(得分:13)

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')"/>

答案 1 :(得分:2)

也许这可以帮到你:

translate(string, string, string)

translate函数接受一个字符串,逐个字符地将与第二个字符串匹配的字符转换为第三个字符串中的相应字符。这是在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