Đây là dành cho XPath 1.0. Nếu môi trường của bạn hỗ trợ XPath 2.0, hãy xem tại đây .
Đúng. Có thể, nhưng không đẹp.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Điều này sẽ hoạt động đối với các chuỗi tìm kiếm đã biết trước bảng chữ cái. Thêm bất kỳ ký tự có dấu nào bạn muốn xem.
Nếu bạn có thể, hãy đánh dấu văn bản mà bạn quan tâm bằng một số phương tiện khác, chẳng hạn như đặt nó trong một <span>
lớp có một lớp nhất định trong khi xây dựng HTML. Những thứ như vậy dễ dàng xác định vị trí bằng XPath hơn nhiều so với các chuỗi con trong văn bản phần tử.
Nếu đó không phải là một tùy chọn, bạn có thể để JavaScript (hoặc bất kỳ ngôn ngữ máy chủ nào khác mà bạn đang sử dụng để thực thi XPath) giúp bạn xây dựng biểu thức XPath động:
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')]"
(Lời khuyên cho câu trả lời của @ KirillPolishchuk - tất nhiên bạn chỉ cần dịch những ký tự mà bạn đang thực sự tìm kiếm .)
Cách tiếp cận này sẽ hoạt động với bất kỳ chuỗi tìm kiếm nào mà không yêu cầu kiến thức trước về bảng chữ cái, đây là một điểm cộng lớn.
Cả hai phương pháp trên đều thất bại khi các chuỗi tìm kiếm có thể chứa các dấu ngoặc kép, trong trường hợp này, mọi thứ trở nên phức tạp hơn .