UPDATE :
Поскольку исходная задача была изменена, добавив требование распознавать слово «Испания» не только во всех возможных заглавных буквах, но также включая символы с акцентом, я обновил решение, приведенное ниже, чтобы теперь «Испания» с â и / или • 1006 * правильно распознано.
Вот более общее решение, чем у @ Alejandro :
Если мы хотим выбрать все элементы, чей атрибут name
содержит слово «Испания» в любой прописной букве, и если все возможные разделители слов не алфавитные символы, то
Это выражение XPath :
/*/*[contains(
concat(' ',
translate(translate(@name,
translate(@name, $vAlpha, ''),
' '),
$vUpper,
$vLower),
' '
),
' spain '
)
]
при применении к этому документу XML :
<elements>
<element id="1" name="france" />
<element id="2" name="usa" />
<element id="3" name="Spaïn" />
<element id="4" name="france with spâin and africa" />
<element id="5" name="-Spain!" />
<element id="6" name="spain and africa" />
<element id="7" name="italie and Spain." />
</elements>
выбирает следующие элементы :
<element id="3" name="Spaïn"/>
<element id="4" name="france with spâin and africa"/>
<element id="5" name="-Spain!"/>
<element id="6" name="spain and africa"/>
<element id="7" name="italie and Spain."/>
В приведенном выше XPath-выражении $vLower
, $vUpper
должно быть заменено (соответственно):
'aaabcdefghiiijklmnopqrstuvwxyz'
и
'âÂABCDEFGHïÏIJKLMNOPQRSTUVWXYZ'
$vAlpha
должен быть заменен объединением $vLower
и $vUpper
.