Kes Insensitif XPath Mengandungi()
Soalan:
Apabila menggunakan XPath untuk menyemak kewujudan rentetan dalam nod teks, seperti dengan ungkapan /html/body//text()[contains(.,'test')], carian adalah sensitif huruf. Bagaimanakah kita boleh menjadikan carian tidak sensitif huruf besar dan kecil dalam XPath untuk JavaScript?
Jawapan:
Walaupun tiada cara mudah untuk melakukan perbandingan tidak sensitif huruf besar dalam XPath 1.0, terdapat teknik untuk mencapai hasil yang serupa:
/html/body//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'test')]
Kaedah ini mengandaikan bahawa abjad yang digunakan diketahui terlebih dahulu, jadi masukkan sebarang aksara beraksen yang mungkin ditemui.
<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"); // -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"</code>
Ini membenarkan carian tidak peka huruf besar-kecil tanpa mengira set aksara yang digunakan.
Perhatikan bahawa kaedah ini mungkin tidak mengendalikan petikan tunggal dalam rentetan carian dengan betul. Untuk kes dengan watak istimewa, pendekatan alternatif mungkin diperlukan.
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Carian XPath Contains() Case-Insensitive?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!