ホームページ  >  記事  >  ウェブフロントエンド  >  XPath 1.0 で大文字と小文字を区別しない contains() 機能を実現するにはどうすればよいですか?

XPath 1.0 で大文字と小文字を区別しない contains() 機能を実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 01:17:30608ブラウズ

How to Achieve Case-Insensitive contains() Functionality in XPath 1.0?

XPath の大文字と小文字を区別しない contains()

XSLT または他の DOM トラバース アプリケーションで、大文字と小文字を区別した文字列比較を使用して XPath クエリを実行すると、制限的であること。ただし、XPath 1.0 で大文字と小文字を区別しない contains() 機能を実現することは可能です。

1.翻訳ベースのメソッド (XPath 1.0)

大文字と小文字を区別する文字列と大文字と小文字を区別しない文字列の両方のバリエーションを一致させるには、translate() 関数を使用します。

/html/body//text()[
  contains(
    translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
    'test'
  )
]

このメソッドすべての大文字を小文字に効果的に変換し、大文字と小文字を区別しない比較を可能にします。ただし、予期される文字セットに関する知識が必要です。

2. JavaScript 支援の動的 XPath 生成

XPath 式の操作が可能な場合は、JavaScript を使用して検索文字列を大文字と小文字のバリアントで動的に置き換えることができます。

<code class="javascript">function xpathPrepare(xpath, searchString) {
  return xpath.replace("$u", searchString.toUpperCase())
              .replace("$l", searchString.toLowerCase())
              .replace("$s", searchString.toLowerCase());
}

xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");</code>

これこのメソッドは、一重引用符を含む任意の文字を含む検索文字列を処理します。

注意: 複雑な/大きな文字列操作が含まれる場合、これらの手法は最適に実行されない可能性があります。可能であれば、既知の文字セットで文字列を保存するか、大文字と小文字を区別しない文字列比較をネイティブにサポートする XPath 2.0 を採用するなど、他の解決策を検討してください。

以上がXPath 1.0 で大文字と小文字を区別しない contains() 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。