XPATH で upper-case() を使用しようとすると、私のパーサーは MSXML 4.0 で、次のようになります。
upper-case is not a valid XSLT or XPath function.
本当に実装されていませんか?
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')"/>
多分これはあなたを助けることができます:
translate(string, string, string)
translate 関数は文字列を受け取り、1 文字ずつ、2 番目の文字列に一致する文字を 3 番目の文字列の対応する文字に変換します。これは、XPath で小文字から大文字に変換する唯一の方法です。これは次のようになります (読みやすくするために余分な空白が追加されています)。このコードは、従業員の姓を大文字に変換し、姓が A で始まる従業員を選択します。
descendant::employee[
starts-with(
translate(@last-name,
"abcdefghijklmnopqrstuvwxyz",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
"A"
)
]
2 番目の文字列が 3 番目の文字列よりも多くの文字を含む場合、これらの余分な文字は最初の文字列から削除されます。3 番目の文字列が 2 番目の文字列よりも多くの文字を含む場合、余分な文字は無視されます。