#ifndef _DOM_H_ #define _DOM_H_ #define ELEMENT_NODE 1 #define ATTRIBUTE_NODE 2 #define TEXT_NODE 3 struct node; TAILQ_HEAD(node_list, node); struct dom_parse_info { struct parse_info dpi_pi; TAILQ_HEAD(, node) dpi_nodes; struct node * dpi_root; }; struct node { TAILQ_ENTRY(node) n_link; TAILQ_ENTRY(node) n_child; struct node_list n_children; struct node_list n_attributes; struct node * n_parent; int n_type; const char * n_name; const char * n_value; }; typedef int node_func_t(void *arg); struct node * dom_parse(const char *file, char *entity_path); void dom_start_element(void *userData, const XML_Char *name, const XML_Char **atts); void dom_end_element(void *userData, const XML_Char *name); void dom_characters(void *userData, const XML_Char *s, int len); struct node * node_copy(struct node *n); struct node * node_find_attribute_by_name(struct node *root, const char *name); void node_find_children_by_attribute_value(struct node *root, struct node_list *list, const char *name, const char *value, int recurse); struct node * node_find_child_by_name(struct node *root, const char *name, int recurse); void node_find_children_by_name(struct node *root, struct node_list *list, const char *name, int recurse); const char * node_get_attribute_value(struct node *root, const char *name); void node_get_children(struct node *root, struct node_list *list); void node_get_xpath(struct node *n, char *path); struct node * node_new(int type, const char *name, const char *value, int len); void node_print(struct node *n, int level); #endif