Implemented mxml_print_tree

This commit is contained in:
2022-08-04 12:24:10 +02:00
parent 4d4b4cf17b
commit ed60694e4c
2 changed files with 41 additions and 1 deletions
+40
View File
@@ -2192,6 +2192,46 @@ int mxml_write_tree(const char *file_name, PMXML_NODE tree)
/*------------------------------------------------------------------*/
/**
* write a complete XML tree to a buffer
*/
int mxml_print_tree(char *buffer, int *buffer_size, PMXML_NODE tree)
{
int len;
char *p;
MXML_WRITER *writer;
/* open file */
writer = mxml_open_buffer();
if (writer == NULL)
return FALSE;
/* write XML header */
mxml_start_element(writer, "xml");
for (int i=0 ; i<tree->n_children ; i++)
if (tree->child[i].node_type == ELEMENT_NODE) /* skip PI and comments */
if (!mxml_write_subtree(writer, &tree->child[i], TRUE))
return FALSE;
mxml_end_element(writer); // "xml"
p = mxml_close_buffer(writer);
strlcpy(buffer, p, *buffer_size);
len = strlen(p);
free(p);
p = NULL;
if (len > *buffer_size) {
*buffer_size = 0;
return FALSE;
}
*buffer_size -= len;
return TRUE;
}
/*------------------------------------------------------------------*/
PMXML_NODE mxml_clone_tree(PMXML_NODE tree)
{
PMXML_NODE clone;
+1 -1
View File
@@ -136,7 +136,7 @@ PMXML_NODE mxml_create_root_node(void);
PMXML_NODE mxml_parse_file(const char *file_name, char *error, int error_size, int *error_line);
PMXML_NODE mxml_parse_buffer(const char *buffer, char *error, int error_size, int *error_line);
int mxml_parse_entity(char **buf, const char* file_name, char *error, int error_size, int *error_line);
int mxml_write_tree(const char *file_name, PMXML_NODE tree);
int mxml_print_tree(char *buffer, int *buffer_size, PMXML_NODE tree);
void mxml_debug_tree(PMXML_NODE tree, int level);
void mxml_free_tree(PMXML_NODE tree);