Implemented mxml_debug_tree()

SVN revision: 1234
This commit is contained in:
2005-03-03 15:34:40 +00:00
parent 9229e610b7
commit 71f29f56d2
2 changed files with 60 additions and 2 deletions
+55 -2
View File
@@ -6,6 +6,9 @@
Contents: Midas XML Library
$Log$
Revision 1.3 2005/03/03 15:34:21 ritt
Implemented mxml_debug_tree()
Revision 1.2 2005/03/01 23:55:43 ritt
Fixed compiler warnings
@@ -342,13 +345,25 @@ PMXML_NODE mxml_create_root_node()
PMXML_NODE mxml_add_node(PMXML_NODE parent, char *node_name, char *value)
/* add a subnode (child) to an existing parent node */
{
PMXML_NODE pnode;
PMXML_NODE pnode, pchild;
int i, j;
assert(parent);
if (parent->n_children == 0)
parent->child = malloc(sizeof(MXML_NODE));
else
else {
pchild = parent->child;
parent->child = realloc(parent->child, sizeof(MXML_NODE)*(parent->n_children+1));
if (parent->child != pchild) {
/* correct parent pointer for children */
for (i=0 ; i<parent->n_children ; i++) {
pchild = parent->child+i;
for (j=0 ; j<pchild->n_children ; j++)
pchild->child[j].parent = pchild;
}
}
}
assert(parent->child);
pnode = &parent->child[parent->n_children];
memset(pnode, 0, sizeof(MXML_NODE));
@@ -397,6 +412,17 @@ int mxml_get_number_of_children(PMXML_NODE pnode)
/*------------------------------------------------------------------*/
PMXML_NODE mxml_subnode(PMXML_NODE pnode, int index)
/* return number of subnodes (children) of a node */
{
assert(pnode);
if (index < pnode->n_children)
return &pnode->child[index];
return NULL;
}
/*------------------------------------------------------------------*/
PMXML_NODE mxml_find_node(PMXML_NODE tree, char *xml_path)
/*
Search for a specific XML node with a subset of XPATH specifications.
@@ -1025,6 +1051,33 @@ BOOL mxml_write_tree(char *file_name, PMXML_NODE tree)
/*------------------------------------------------------------------*/
void mxml_debug_tree(PMXML_NODE tree, int level)
/* print XML tree for debugging */
{
int i;
for (i=0 ; i<level ; i++)
printf(" ");
printf("Name: %s\n", tree->name);
for (i=0 ; i<level ; i++)
printf(" ");
printf("Addr: %08X\n", tree);
for (i=0 ; i<level ; i++)
printf(" ");
printf("Prnt: %08X\n", tree->parent);
for (i=0 ; i<level ; i++)
printf(" ");
printf("NCld: %d\n", tree->n_children);
for (i=0 ; i<tree->n_children ; i++)
mxml_debug_tree(tree->child+i, level+1);
if (level == 0)
printf("\n");
}
/*------------------------------------------------------------------*/
void mxml_free_tree(PMXML_NODE tree)
/* free memory of XML tree, must be called after any
mxml_create_root_node() or mxml_parse_file() */
+5
View File
@@ -6,6 +6,9 @@
Contents: Header file for mxml.c
$Log$
Revision 1.2 2005/03/03 15:34:40 ritt
Implemented mxml_debug_tree()
Revision 1.1 2005/03/01 23:48:18 ritt
Implemented MXML for password file
@@ -47,6 +50,7 @@ BOOL mxml_write_value(MXML_WRITER *writer, const char *value);
BOOL mxml_close_document(MXML_WRITER *writer);
int mxml_get_number_of_children(PMXML_NODE pnode);
PMXML_NODE mxml_subnode(PMXML_NODE pnode, int index);
PMXML_NODE mxml_find_node(PMXML_NODE tree, char *xml_path);
char *mxml_get_value(PMXML_NODE pnode);
char *mxml_get_attribute(PMXML_NODE pnode, char *name);
@@ -66,6 +70,7 @@ BOOL mxml_delete_attribute(PMXML_NODE, char *attrib_name);
PMXML_NODE mxml_create_root_node();
PMXML_NODE mxml_parse_file(char *file_name, char *error, int error_size);
BOOL mxml_write_tree(char *file_name, PMXML_NODE tree);
void mxml_debug_tree(PMXML_NODE tree, int level);
void mxml_free_tree(PMXML_NODE tree);
/*------------------------------------------------------------------*/