28

lower-casexpath関数またはを使用してxpathクエリを取得しようとしていますupper-caseが、セレンでは機能しないようです(適用する前にxpathをテストします)。

うまくいかない例:

//*[.=upper-case('some text')]

大文字と小文字を使用しない限り、複雑なパスで必要なノードを見つけたり、集約関数を使用したりすることに問題はありません。

誰もこれに遭遇したことがありますか?それは理にかなっていますか?

ありがとう。

4

2 に答える 2

65

upper-case()およびlower-case()XPath 2.0 関数です。お使いのプラットフォームが XPath 1.0 のみをサポートしている可能性があります。

試す:

translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')

これが XPath 1.0 の方法です。残念ながら、これにはテキストで使用されているアルファベットの知識が必要です。プレーンな英語の場合、上記はおそらく機能しますが、アクセント付きの文字が予想される場合は、それらをリストに追加してください.


ほとんどの環境では、ある種のホスト言語から XPath を使用しており、ホスト言語の機能を使用して、検索文字列の大文字と小文字のバリアントを に外部から提供することで、この XPath 1.0 の制限を回避できますtranslate()

Python の例に示されています。

search = 'Some Text'
lc = search.lower()
uc = search.upper()

xpath = f"//p[contains(translate(., '{lc}', '{uc}'), '{uc}')]"

これにより、次の XPath 式が生成されます。

//p[contains(translate(., 'some text', 'SOME TEXT'), 'SOME TEXT')]

大文字と小文字を区別せずに検索し、任意の検索テキストに対して機能します。

于 2009-10-26T16:45:30.727 に答える
2

xslt の複数の場所で大文字が必要になる場合は、小文字と大文字の変数を定義してから、どこでも翻訳関数でそれらを使用できます。xslt をよりクリーンにする必要があります。

XSL/XPATHでの例: MSXML 4.0 には大文字の関数はありませんか?

于 2009-12-31T03:55:37.003 に答える