Merge "core/frame: Fix ast_frdup() and ast_frisolate() for empty text frames"
[asterisk/asterisk.git] / main / xml.c
index bd58508..d60dd90 100644 (file)
@@ -31,8 +31,6 @@
 #include "asterisk/utils.h"
 #include "asterisk/autoconfig.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
-
 #if defined(HAVE_LIBXML2)
 #include <libxml/parser.h>
 #include <libxml/tree.h>
@@ -55,6 +53,9 @@ int ast_xml_init(void)
 int ast_xml_finish(void)
 {
        xmlCleanupParser();
+#ifdef HAVE_LIBXSLT_CLEANUP
+       xsltCleanupGlobals();
+#endif
 
        return 0;
 }
@@ -95,6 +96,9 @@ struct ast_xml_doc *ast_xml_open(char *filename)
        ast_log(LOG_NOTICE, "XSLT support not found. XML documentation may be incomplete.\n");
 #endif /* HAVE_LIBXSLT */
 
+       /* Optimize for XPath */
+       xmlXPathOrderDocElems(doc);
+
        return (struct ast_xml_doc *) doc;
 }
 
@@ -138,6 +142,22 @@ struct ast_xml_node *ast_xml_add_child(struct ast_xml_node *parent, struct ast_x
        return (struct ast_xml_node *) xmlAddChild((xmlNode *) parent, (xmlNode *) child);
 }
 
+struct ast_xml_node *ast_xml_add_child_list(struct ast_xml_node *parent, struct ast_xml_node *child)
+{
+       if (!parent || !child) {
+               return NULL;
+       }
+       return (struct ast_xml_node *) xmlAddChildList((xmlNode *) parent, (xmlNode *) child);
+}
+
+struct ast_xml_node *ast_xml_copy_node_list(struct ast_xml_node *list)
+{
+       if (!list) {
+               return NULL;
+       }
+       return (struct ast_xml_node *) xmlCopyNodeList((xmlNode *) list);
+}
+
 struct ast_xml_doc *ast_xml_read_memory(char *buffer, size_t size)
 {
        xmlDoc *doc;
@@ -380,4 +400,3 @@ struct ast_xml_xpath_results *ast_xml_query(struct ast_xml_doc *doc, const char
 }
 
 #endif /* defined(HAVE_LIBXML2) */
-