BaseX XQuery заменяет

У меня следующая проблема. Я хочу заменить значение элемента в моем xquery-файле, используя baseX в качестве базы данных. Код xquery выглядит следующим образом:

    let $db := doc('update.xml')

replace value of node $db//elem with 'haha'

return <result> {$db//elem/text()} </result>

XML-документ содержит следующие элементы:

<?xml version="1.0" encoding="ISO-8859-1"?>
<root xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<check>
    <ok>
        <elem>test</elem>
        <help></help>
    </ok>
</check>
</root> 

Каждый раз, когда я хочу выполнить этот xquery, выдается сообщение об ошибке:

Expecting 'where', 'order' or 'return' expression

так что я должен сделать или изменить, чтобы просто заменить текст "тест" на "хаха" в элементе? Если я использую только эту строку кода, это работает, но я должен прочитать из URL-параметра, поэтому мне нужно больше строк кода, кроме строки "заменить...."!

1 ответ

let запускает выражение flwor, которое не может напрямую содержать операторы обновления. Вам придется поставить return между этими двумя:

let $db := doc('update.xml')
return
  replace value of node $db//elem with 'haha'

Вы также сможете выполнять произвольные вычисления, но позаботьтесь о том, чтобы ваш запрос не возвращал никаких результатов.

Невозможно использовать операторы обновления и одновременно возвращать результат.

Другие вопросы по тегам