external tree_subtree_size : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_size" "noalloc"
let subtree_size t n = tree_subtree_size t.doc n
-external tree_subtree_elements : tree -> [`Tree] Node.t -> int = "caml_xml_tree_subtree_elements" "noalloc"
-let subtree_elements t n = tree_subtree_elements t.doc n
+let subtree_elements t node =
+ let size = tree_subtree_size t.doc node - 1 in
+ if size == 0 then 0
+ else let size = size - (tree_subtree_tags t.doc node Tag.pcdata) in
+ if size < 2 then size else
+ let acc = ref size in
+ for i = 0 to Array.length t.attribute_array - 1 do
+ acc := !acc - tree_subtree_tags t.doc node t.attribute_array.(i)
+ done;
+ !acc
external tree_closing : tree -> [`Tree] Node.t -> [`Tree] Node.t = "caml_xml_tree_closing" "noalloc"
let closing t n = tree_closing t.doc n