2.Я попытался содержит (перевод ((. "ABCEDF ...", "abcdef ..."), "case-insentive-string")] 'тоже не удался.
Правильный способ написать это: :
/root/book[contains(translate(., $vUpper, $vLower),
translate($vCaseInsentiveString, $vUpper, $vLower)
)
]
, где $vUpper
и $vLower
определены как (должны быть заменены) строки:
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
и
'abcdefghijklmnopqrstuvwxyz'
и $vCaseInsentiveString
определяется как (должна быть заменена) конкретная строка без учета регистра.
Например, с учетом следующего XMLdocument :
<authors>
<author>
<name>Victor Hugo & Co.</name>
<nationality>French</nationality>
</author>
<author period="classical" category="children">
<name>J.K.Rollings</name>
<nationality>British</nationality>
</author>
<author period="classical">
<name>Sophocles</name>
<nationality>Greek</nationality>
</author>
<author>
<name>Leo Tolstoy</name>
<nationality>Russian</nationality>
</author>
<author>
<name>Alexander Pushkin</name>
<nationality>Russian</nationality>
</author>
<author period="classical">
<name>Plato</name>
<nationality>Greek</nationality>
</author>
</authors>
следующее выражение XPath (подставьте переменные соответствующими строками):
/*/author/name
[contains(translate(., $vUpper, $vLower),
translate('lEo', $vUpper, $vLower)
)
]
выбирает этот элемент :
<name>Leo Tolstoy</name>
Пояснение : Оба аргумента функции contains()
преобразуются в нижний регистр, а затем выполняется сравнение.