Содержит() без учета регистра в XPath
В XSLT или других приложениях, использующих DOM, выполнение запросов XPath с сравнением строк с учетом регистра может быть ограничивающим. Однако реализация функции contains() без учета регистра в XPath 1.0 возможна.
1. Метод на основе перевода (XPath 1.0)
Чтобы сопоставить варианты строки как с учетом, так и без учета регистра, используйте функцию перевода():
/html/body//text()[ contains( translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'test' ) ]
Этот метод эффективно переводит все прописные буквы в строчные, позволяя выполнять сравнения без учета регистра. Однако для этого требуется знание ожидаемого набора символов.
2. Динамическая генерация XPath с помощью JavaScript
Если возможно манипулирование выражением XPath, вы можете использовать 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");
Этот метод обрабатывает искать строки с произвольными символами, включая одинарные кавычки.
Внимание: Эти методы могут работать неоптимально, если задействованы сложные/большие строковые операции. Если возможно, рассмотрите другие решения, такие как хранение строк с известными наборами символов или использование XPath 2.0, который изначально поддерживает сравнения строк без учета регистра.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3