4

XPATH で upper-case() を使用しようとすると、私のパーサーは MSXML 4.0 で、次のようになります。

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

本当に実装されていませんか?

4

2 に答える 2

13

xslt 1.0 には、大文字または小文字に変換する関数はありません。代わりに、次のようにします。

多くの場所で必要な場合:

これら 2 つの 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)"/>

1箇所で使いたいなら変数宣言不要

<xsl:value-of select="translate(@name,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
于 2009-08-04T08:27:22.653 に答える
2

多分これはあなたを助けることができます:

translate(string, string, string)

translate 関数は文字列を受け取り、1 文字ずつ、2 番目の文字列に一致する文字を 3 番目の文字列の対応する文字に変換します。これは、XPath で小文字から大文字に変換する唯一の方法です。これは次のようになります (読みやすくするために余分な空白が追加されています)。このコードは、従業員の姓を大文字に変換し、姓が A で始まる従業員を選択します。

descendant::employee[
 starts-with(
  translate(@last-name, 
      "abcdefghijklmnopqrstuvwxyz", 
      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 
  "A"
 ) 
]

2 番目の文字列が 3 番目の文字列よりも多くの文字を含む場合、これらの余分な文字は最初の文字列から削除されます。3 番目の文字列が 2 番目の文字列よりも多くの文字を含む場合、余分な文字は無視されます。

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

于 2009-08-04T08:25:09.053 に答える