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'
Вы также сможете выполнять произвольные вычисления, но позаботьтесь о том, чтобы ваш запрос не возвращал никаких результатов.
Невозможно использовать операторы обновления и одновременно возвращать результат.