-let element_by_tag tree tagset = let dom = all_nodes tree in
- List.filter (fun c -> QNameSet.mem (Naive_tree.tag tree c) tagset ) dom
+let element_by_tag tree tagset kind = let dom = all_nodes tree in
+ List.filter (fun c ->
+ Tree.NodeKind.is_a (Naive_tree.kind tree c) kind &&
+ QNameSet.mem (Naive_tree.tag tree c) tagset ) dom
+
+let mk_node q = {desc = q; id = -1; hash = -1}