#if-statement #replace #match #xquery
Вопрос:
У меня есть строка, скажем, let $baseString := "stringToReplace-Rem-aining-String"
. Я хочу запустить условный тест, чтобы проверить , $baseString
содержит "stringToReplace"
ли он и "-"
, if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-]) )"))
, и если да, я хочу заменить 'stringToReplace'
на 'replacedString'
и также "-"
на ""
(пусто), поэтому выходная строка должна быть replacedStringRemainingString
. Как я могу добиться этого в XQuery?
До сих пор у меня работало ниже 2 отдельных блоков кода, но мне нужно как — то объединить 2 вместе. И я действительно не вижу причины, по которой я использую здесь цикл for, но именно так я получил этот блок кода для выполнения без ошибок.
let $baseString := "stringToReplace-Rem-aining-String"
for $x in $baseString return
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-]) )"))
then (fn:concat('replacedString',fn:substring($baseString,16,40)))
else ($baseString)
это дает результат
replacedString-Rem-aining-String
и
let $baseString := "stringToReplace-Rem-aining-String"
for $x in $baseString return
if (fn:substring($baseString,1,15) = 'stringToReplace' and fn:matches($baseString, "(([-]) )"))
then (fn:replace($baseString, "(([-]) )", ""))
else ($baseString)
это дает результат stringToReplaceRemainingString
.
Есть какие-нибудь идеи, пожалуйста?
Ответ №1:
Вы можете попробовать объединить then
буквы s, чтобы
then (
let $tmp := fn:concat('replacedString',fn:substring($baseString,16,40))
return fn:replace($tmp, "(([-]) )", "")
)
Это приведет к ожидаемому результату, по крайней мере, для строки в вашем вопросе.
Комментарии:
1. и этот ответ, и ответ @Michaelkay делают то, что я искал.
Ответ №2:
Попробуй:
let $baseString := 'stringToReplace-Rem-aining-String'
return
if (matches($baseString, '^stringToReplace.*-'))
then ('replacedString' || translate(substring($baseString, 16), '-', ''))
else $baseString