diff --git a/mxml.cxx b/mxml.cxx index bf2d476..0e98259 100644 --- a/mxml.cxx +++ b/mxml.cxx @@ -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 ; in_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; diff --git a/mxml.h b/mxml.h index f87c27a..0879da2 100644 --- a/mxml.h +++ b/mxml.h @@ -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);