diff options
author | eliel <eliel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-04-22 18:07:02 +0000 |
---|---|---|
committer | eliel <eliel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2010-04-22 18:07:02 +0000 |
commit | 2b551e72e492fbdb71e3439bf15c50f88f0a3733 (patch) | |
tree | d5bd73cbba3ce087868b07fa87d38ea0b298add2 /main/xml.c | |
parent | 10c0f82f94892f60b726f2306426c5dc155604f9 (diff) |
Asterisk data retrieval API.
This module implements an abstraction for retrieving and exporting
asterisk data.
Developed by:
Brett Bryant <brettbryant@gmail.com>
Eliel C. Sardanons (LU1ALY) <eliels@gmail.com>
For the Google Summer of code 2009 Project.
Documentation can be found in doxygen format and inside the
header include/asterisk/data.h
Review: https://reviewboard.asterisk.org/r/275/
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@258517 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/xml.c')
-rw-r--r-- | main/xml.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/main/xml.c b/main/xml.c index 0f93abc54..e28a989d8 100644 --- a/main/xml.c +++ b/main/xml.c @@ -68,6 +68,46 @@ struct ast_xml_doc *ast_xml_open(char *filename) return (struct ast_xml_doc *) doc; } +struct ast_xml_doc *ast_xml_new(void) +{ + xmlDoc *doc; + + doc = xmlNewDoc((const xmlChar *) "1.0"); + return (struct ast_xml_doc *) doc; +} + +struct ast_xml_node *ast_xml_new_node(const char *name) +{ + xmlNode *node; + if (!name) { + return NULL; + } + + node = xmlNewNode(NULL, (const xmlChar *) name); + + return (struct ast_xml_node *) node; +} + +struct ast_xml_node *ast_xml_new_child(struct ast_xml_node *parent, const char *child_name) +{ + xmlNode *child; + + if (!parent || !child_name) { + return NULL; + } + + child = xmlNewChild((xmlNode *) parent, NULL, (const xmlChar *) child_name, NULL); + return (struct ast_xml_node *) child; +} + +struct ast_xml_node *ast_xml_add_child(struct ast_xml_node *parent, struct ast_xml_node *child) +{ + if (!parent || !child) { + return NULL; + } + return (struct ast_xml_node *) xmlAddChild((xmlNode *) parent, (xmlNode *) child); +} + struct ast_xml_doc *ast_xml_read_memory(char *buffer, size_t size) { xmlDoc *doc; @@ -97,6 +137,14 @@ void ast_xml_close(struct ast_xml_doc *doc) doc = NULL; } +void ast_xml_set_root(struct ast_xml_doc *doc, struct ast_xml_node *node) +{ + if (!doc || !node) { + return; + } + + xmlDocSetRootElement((xmlDoc *) doc, (xmlNode *) node); +} struct ast_xml_node *ast_xml_get_root(struct ast_xml_doc *doc) { @@ -152,6 +200,19 @@ const char *ast_xml_get_attribute(struct ast_xml_node *node, const char *attrnam return (const char *) attrvalue; } +int ast_xml_set_attribute(struct ast_xml_node *node, const char *name, const char *value) +{ + if (!name || !value) { + return -1; + } + + if (!xmlSetProp((xmlNode *) node, (xmlChar *) name, (xmlChar *) value)) { + return -1; + } + + return 0; +} + struct ast_xml_node *ast_xml_find_element(struct ast_xml_node *root_node, const char *name, const char *attrname, const char *attrvalue) { struct ast_xml_node *cur; @@ -184,6 +245,15 @@ struct ast_xml_node *ast_xml_find_element(struct ast_xml_node *root_node, const return NULL; } +struct ast_xml_doc *ast_xml_get_doc(struct ast_xml_node *node) +{ + if (!node) { + return NULL; + } + + return (struct ast_xml_doc *) ((xmlNode *)node)->doc; +} + struct ast_xml_ns *ast_xml_find_namespace(struct ast_xml_doc *doc, struct ast_xml_node *node, const char *ns_name) { xmlNsPtr ns = xmlSearchNs((xmlDocPtr) doc, (xmlNodePtr) node, (xmlChar *) ns_name); return (struct ast_xml_ns *) ns; @@ -203,6 +273,20 @@ const char *ast_xml_get_text(struct ast_xml_node *node) return (const char *) xmlNodeGetContent((xmlNode *) node); } +void ast_xml_set_text(struct ast_xml_node *node, const char *content) +{ + if (!node || !content) { + return; + } + + xmlNodeSetContent((xmlNode *) node, (const xmlChar *) content); +} + +int ast_xml_doc_dump_file(FILE *output, struct ast_xml_doc *doc) +{ + return xmlDocDump(output, (xmlDocPtr)doc); +} + const char *ast_xml_node_get_name(struct ast_xml_node *node) { return (const char *) ((xmlNode *) node)->name; |