XPath's Case-Insensitive contains()
Dalam XSLT atau aplikasi merentasi DOM lain, melakukan pertanyaan XPath dengan perbandingan rentetan sensitif huruf besar boleh mengehadkan. Walau bagaimanapun, mencapai fungsi tidak sensitif huruf besar dan kecil mengandungi() dalam XPath 1.0 adalah mungkin.
1. Kaedah Berasaskan Terjemahan (XPath 1.0)
Untuk memadankan kedua-dua variasi sensitif huruf besar dan huruf kecil bagi rentetan, gunakan fungsi translate():
/html/body//text()[ contains( translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'test' ) ]
Kaedah ini menterjemahkan semua huruf besar kepada huruf kecil dengan berkesan, membolehkan perbandingan tidak sensitif huruf besar. Walau bagaimanapun, ia memerlukan pengetahuan tentang set watak yang diharapkan.
2. Penjanaan XPath Dinamik Berbantukan JavaScript
Jika memanipulasi ungkapan XPath adalah mungkin, anda boleh menggunakan JavaScript untuk menggantikan rentetan carian secara dinamik dengan varian atas dan huruf kecilnya:
<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>
Ini kaedah mengendalikan rentetan carian dengan aksara arbitrari, termasuk petikan tunggal.
Awas: Teknik ini mungkin tidak berfungsi secara optimum jika operasi rentetan kompleks/besar terlibat. Jika boleh, pertimbangkan penyelesaian lain seperti menyimpan rentetan dengan set aksara yang diketahui atau menggunakan XPath 2.0, yang secara asli menyokong perbandingan rentetan tidak sensitif huruf besar-besaran.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kefungsian Case-Insensitive contains() dalam XPath 1.0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!