Нужно что-то вроде этого в Marklogic
с помощью xquery
. Получите документ, присутствующий в местоположении, если нет, создайте документ, используя xdmp:document-insert()
, а затем извлеките документ с помощью fn:doc()
.Marklogic: Вставить и извлечь документ с использованием xquery в том же запуске
В первом запуске документа нет. Поэтому он создает документ, но ничего не получает. Во втором запуске извлекается документ, созданный в первом запуске. Но я хочу сделать то же самое.
Я знаю, что здесь отсутствует что-то простое. Это одно дело с одной транзакцией? Оба оператора находятся в отдельных строках, поэтому не уверен, что это один случай транзакции.
declare function lk:createXmlIfNotPresent(){
let $xml_dir := "app/test"
let $xml_full_path := "app/test/test.xml"
let $dir_uri := cts:uri-match($xml_dir)
let $dir_creation :=
if(fn:empty($xml_dir)) then (
xdmp:directory-create($xml_dir)
)else()
let $exists := fn:doc-available($xml_full_path)
let $xml_creation :=
if($exists eq fn:false()) then (
xdmp:document-insert($xml_full_path,<root></root>,xdmp:default- permissions())
)else()
return fn:doc($xml_full_path)
};
Вы можете обойти транзакционную суету здесь, просто вернув , если он не существует, а не используется fn: doc .. –
grtjn
Я хочу, чтобы документ был написан в ML @grtjn. Я бы использовал этот xml в других функциях в одном и том же xquery – NitZRobotKoder
Вы все равно можете это сделать, пока вы передаете результат этой функции, вместо использования fn: doc всюду. – grtjn