Eu só quero encontrar todos os nomes de documentos em uma floresta.
Eu sei o nome da floresta (ABC) e preciso encontrar todos os documentos dessa floresta (ABC). Minha saída deve ser assim.
Forest ABC tem
A.xml
B.xml
C.xml
e assim por diante...
Para listar todos os URIs de uma floresta específica, você pode usar cts:uris()
e especificar o forest-id no quinto parâmetro:
cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))
Seu comentário sugeriu que o motivo pelo qual você está tentando listar todos os URIs de uma floresta específica é para poder excluir aqueles que são duplicados.
O código a seguir pode ser usado para obter todos os URIs da floresta especificada e, em seguida, removê-los dessa floresta se estiverem duplicados.
Se você tentar ler as propriedades do documento e uma exceção XDMP-DBDUPURI for lançada, capture essa exceção e exclua o documento em uma transação diferente da floresta com problema.
(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC");
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);
for $uri in $URIS
return
try {
let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
return ()
} catch($e) {
if ($e/error:code = "XDMP-DBDUPURI") then
xdmp:invoke-function(
function(){ xdmp:document-delete($uri) },
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<database>{$PROBLEM-FOREST}</database>
</options>
)
else ()
}
Dependendo de quantos documentos há nesta floresta, você pode ter problemas de tempo limite. Você pode considerar a execução disso como um trabalho CORB em que os URIs forsts são selecionados no URIS-MODULE e, em seguida, cada inspeção / exclusão é tratada individualmente no PROCESS-MODULE .
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras