+
+ /**
+ * [select_descendant(n, tags)] returns the first descendant of [n] in
+ * pre-order which has a tag in [tags]. [tags] is a xml_tree::NIL_TAG_ID
+ * terminated array of xml_tree::tag_t. Returns xml_tree::NIL if no such
+ * node exists.
+ * Runs in O(sizeof(tags))
+ */
+ inline node_t select_descendant(node_t, tag_t*) const;
+
+ /**
+ * [select_sibling(n, tags)] returns the first following sibling of
+ * of [n] in pre-order which has a tag in [tags].
+ * [tags] is a xml_tree::NIL_TAG_ID terminated array of xml_tree::tag_t.
+ * Returns xml_tree::NIL if no such node exists.
+ * Runs in O(sizeof(tags))
+ */