Как я могу использовать XPath, чтобы выполнить поиск без учета регистра и поддерживать неанглийские символы?

Я исследовал эту тему в прошлый раз. Я нашел ответ. До SDK 10 вы можете установить интенсивность белого цвета

Итак:

target.light?.color = UIColor(white: intensity/1000.0, alpha: 1.0)

действует так же, как

target.light?.intensity = intensity

Проблема решена. Может быть, кто-то в будущем будет использовать мой решить:)

7
задан rebellion 9 March 2009 в 12:12
поделиться

4 ответа

В XPath 1.0 (который является, я верю, лучшее можно добраться с PHP SimpleXML), необходимо было бы использовать translate() функционируйте для создания все-строчного вывода из входа смешанного случая.

Для удобства я перенес бы его в функцию как это:

function findStopPointByName($xml, $query) {
  $upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"; // add any characters...
  $lower = "abcdefghijklmnopqrstuvwxyzæøå"; // ...that are missing

  $arg_stopname = "translate(StopName, '$upper', '$lower')";
  $arg_query    = "translate('$query', '$upper', '$lower')";

  return $xml->xpath("//StopPoint[contains($arg_stopname, $arg_query)");
}

Как мера по очистке я или полностью запретил бы или вышел бы из одинарных кавычек в $query, потому что они повредят Вашу строку XPath, если они будут проигнорированы.

12
ответ дан 6 December 2019 в 07:28
поделиться

В XPath 2.0 можно использовать lower-case() функция, которая является unicode знающий, таким образом, она обработает прекрасные символы неASCII.

contains(lower-case(StopName), lower-case('$query'))

Для получения доступ XPath 2.0 к Вам, нужен синтаксический анализатор XSLT 2.0. Например, САКС. Можно получить доступ к нему от PHP через JavaBridge.

9
ответ дан 6 December 2019 в 07:28
поделиться

Кроме того:

$xml-> xpath ("//StopPoint [содержит (StopName, '$query')]");

Необходимо будет разделить любые символы апострофа от $query, чтобы не повреждать выражение.

В XPath 2.0 можно удвоить кавычку, используемую в разделителе помещать ту кавычку в строковый литерал, но в XPath 1.0 невозможно включать разделитель в строку.

0
ответ дан 6 December 2019 в 07:28
поделиться

Неанглийские имена не должны быть проблемой. Просто добавьте их к своему XPath. (XML определяется как использование Unicode).

Что касается нечувствительности к регистру...

XPath 1.0 включает следующее утверждение:

Две строки равны, если и только если они состоят из той же последовательности символов UCS.

Таким образом, даже использование явных предикатов на локальном имени не поможет.

XPath 2 включает функции для отображения случая. Например, fn:upper-случай


Дополнительный: использование XPath переводит функцию, должен позволить случаю, отображающемуся фальсифицироваться в XPath 1, но вход должен будет включать каждую кодовую точку в корпусе, в которой Вы и Ваши пользователи будете когда-либо нуждаться:

"test" = translate($inputString, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
3
ответ дан 6 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: