Este problema pode ser realizado com diferentes níveis de ambição:
Nível 1:
O que se pretende é usar actores para navegar de forma concorrente numa árvore XML. O actor inicial recebe a árvore completa. Quando um actor desce por um ramo da esquerda, cria um actor suplementar para lidar com o ramo direito.
Sempre que um actor descobre uma subárvore com a propriedade pretendida, envia essa subárvore para um actor especial que coleciona os resultados.
Temos dois tipos de actores: Navegante e Coletor.
Nível 2:
Para garantir a ordem certa do resultado final, é preciso enviar para o Coletor uma chave de ordenação juntamente com a subárvore.
Chave de ordenação: O mais fácil é ser uma lista só com "0" e "1", construida pelos actores à medida que descem pela árvore. "0" significa esquerda e "1" direita.
Nível 3:
Neste nível definir uma cache para reutilizar os actores que chegam às folhas da árvore. Já fizeram o seu trabalho, mas em vez de serem destruídos podem ser utilizados para trabalhar noutras partes da árvore.
Penso que isto já deve ajudar.