Estou tentando declarar uma função definida pelo usuário no XQuery, que receberia um elemento e retornaria o número total de elementos em sua árvore (ou seja, ele próprio mais sua subárvore).
Isso é possível mesmo no XQuery com uma função recursiva ou precisarei de outra abordagem?
Respostas:
1 para resposta № 1Sim, isso é possível. Como isso tem um cheiro de lição de casa, não estou dando uma resposta completa, mas a idéia de como fazê-lo.
Nos dois casos, você terá que considerar qual crianças a considerar enquanto conta. Lendo sua pergunta, parece que você está procurando apenas elementos e pode ignorar com segurança atributos, comentários, nós de texto e instruções de processamento.
Usando uma função recursiva
Defina uma função, que resume o tamanho de cada subárvore individual (que você determina por uma chamada de função recursiva). Algo como (este não é o código XQuery!):
function subtree_size {
sum(
for each element
return subtree_size(current element)
)
}
Passando todos os elementos para o count
Função
XQuery tem um count
função, que retorna o número de elementospassado. Existe uma expressão XPath muito curta e bastante fácil de encontrar para retornar todos os nós descendentes (incluindo o próprio nó). Veja as etapas do eixo disponíveis no XPath.