Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Mencapai Kefungsian Case-Insensitive contains() dalam XPath 1.0?

Bagaimana untuk Mencapai Kefungsian Case-Insensitive contains() dalam XPath 1.0?

Barbara Streisand
Barbara Streisandasal
2024-10-23 01:17:30612semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn