XML abstraction layer. More...
#include "asterisk.h"#include "asterisk/xml.h"#include "asterisk/logger.h"#include <libxml/parser.h>#include <libxml/tree.h>#include <libxml/xinclude.h>
Go to the source code of this file.
Functions | |
| struct ast_xml_node * | ast_xml_add_child (struct ast_xml_node *parent, struct ast_xml_node *child) |
| Add a child node, to a specified parent node. | |
| void | ast_xml_close (struct ast_xml_doc *doc) |
| Close an already open document and free the used structure. | |
| int | ast_xml_doc_dump_file (FILE *output, struct ast_xml_doc *doc) |
| Dump the specified document to a file. | |
| struct ast_xml_node * | ast_xml_find_element (struct ast_xml_node *root_node, const char *name, const char *attrname, const char *attrvalue) |
| Find a node element by name. | |
| struct ast_xml_ns * | ast_xml_find_namespace (struct ast_xml_doc *doc, struct ast_xml_node *node, const char *ns_name) |
| int | ast_xml_finish (void) |
| Cleanup library allocated global data. | |
| void | ast_xml_free_attr (const char *attribute) |
| Free an attribute returned by ast_xml_get_attribute() | |
| void | ast_xml_free_node (struct ast_xml_node *node) |
| Free node. | |
| void | ast_xml_free_text (const char *text) |
| Free a content element that was returned by ast_xml_get_text() | |
| const char * | ast_xml_get_attribute (struct ast_xml_node *node, const char *attrname) |
| Get a node attribute by name. | |
| struct ast_xml_doc * | ast_xml_get_doc (struct ast_xml_node *node) |
| Get the document based on a node. | |
| const char * | ast_xml_get_ns_href (struct ast_xml_ns *ns) |
| struct ast_xml_node * | ast_xml_get_root (struct ast_xml_doc *doc) |
| Get the document root node. | |
| const char * | ast_xml_get_text (struct ast_xml_node *node) |
| Get an element content string. | |
| int | ast_xml_init (void) |
| Initialize the XML library implementation. This function is used to setup everything needed to start working with the xml implementation. | |
| struct ast_xml_doc * | ast_xml_new (void) |
| Create a XML document. | |
| struct ast_xml_node * | ast_xml_new_child (struct ast_xml_node *parent, const char *child_name) |
| Add a child node inside a passed parent node. | |
| struct ast_xml_node * | ast_xml_new_node (const char *name) |
| Create a XML node. | |
| struct ast_xml_node * | ast_xml_node_get_children (struct ast_xml_node *node) |
| Get the node's children. | |
| const char * | ast_xml_node_get_name (struct ast_xml_node *node) |
| Get the name of a node. | |
| struct ast_xml_node * | ast_xml_node_get_next (struct ast_xml_node *node) |
| Get the next node in the same level. | |
| struct ast_xml_node * | ast_xml_node_get_parent (struct ast_xml_node *node) |
| Get the parent of a specified node. | |
| struct ast_xml_node * | ast_xml_node_get_prev (struct ast_xml_node *node) |
| Get the previous node in the same leve. | |
| struct ast_xml_doc * | ast_xml_open (char *filename) |
| Open an XML document. | |
| struct ast_xml_doc * | ast_xml_read_memory (char *buffer, size_t size) |
| Open an XML document that resides in memory. | |
| int | ast_xml_set_attribute (struct ast_xml_node *node, const char *name, const char *value) |
| Set an attribute to a node. | |
| void | ast_xml_set_root (struct ast_xml_doc *doc, struct ast_xml_node *node) |
| Specify the root node of a XML document. | |
| void | ast_xml_set_text (struct ast_xml_node *node, const char *content) |
| Set an element content string. | |
XML abstraction layer.
Definition in file xml.c.
| struct ast_xml_node* ast_xml_add_child | ( | struct ast_xml_node * | parent, |
| struct ast_xml_node * | child | ||
| ) | [read] |
Add a child node, to a specified parent node.
| parent | Where to add the child node. |
| child | The child node to add. |
| NULL | on error. |
| non-NULL | The add child node on success. |
Definition at line 103 of file xml.c.
Referenced by data_get_xml_add_child().
{
if (!parent || !child) {
return NULL;
}
return (struct ast_xml_node *) xmlAddChild((xmlNode *) parent, (xmlNode *) child);
}
| void ast_xml_close | ( | struct ast_xml_doc * | doc | ) |
Close an already open document and free the used structure.
| doc | The document reference. |
Definition at line 130 of file xml.c.
Referenced by ast_data_get_xml(), ast_xmldoc_load_documentation(), cc_esc_publish_handler(), sip_pidf_validate(), and xmldoc_unload_documentation().
{
if (!doc) {
return;
}
xmlFreeDoc((xmlDoc *) doc);
doc = NULL;
}
| int ast_xml_doc_dump_file | ( | FILE * | output, |
| struct ast_xml_doc * | doc | ||
| ) |
| struct ast_xml_node* ast_xml_find_element | ( | struct ast_xml_node * | root_node, |
| const char * | name, | ||
| const char * | attrname, | ||
| const char * | attrvalue | ||
| ) | [read] |
Find a node element by name.
| root_node | This is the node starting point. |
| name | Node name to find. |
| attrname | attribute name to match (if NULL it won't be matched). |
| attrvalue | attribute value to match (if NULL it won't be matched). |
| NULL | if not found. |
| The | node on success. |
Definition at line 216 of file xml.c.
References ast_xml_free_attr(), ast_xml_get_attribute(), ast_xml_node_get_name(), and ast_xml_node_get_next().
Referenced by cc_esc_publish_handler(), xmldoc_build_field(), and xmldoc_get_node().
{
struct ast_xml_node *cur;
const char *attr;
if (!root_node) {
return NULL;
}
for (cur = root_node; cur; cur = ast_xml_node_get_next(cur)) {
/* Check if the name matchs */
if (strcmp(ast_xml_node_get_name(cur), name)) {
continue;
}
/* We need to check for a specific attribute name? */
if (!attrname || !attrvalue) {
return cur;
}
/* Get the attribute, we need to compare it. */
if ((attr = ast_xml_get_attribute(cur, attrname))) {
/* does attribute name/value matches? */
if (!strcmp(attr, attrvalue)) {
ast_xml_free_attr(attr);
return cur;
}
ast_xml_free_attr(attr);
}
}
return NULL;
}
| struct ast_xml_ns* ast_xml_find_namespace | ( | struct ast_xml_doc * | doc, |
| struct ast_xml_node * | node, | ||
| const char * | ns_name | ||
| ) | [read] |
Definition at line 257 of file xml.c.
Referenced by pidf_validate_presence().
{
xmlNsPtr ns = xmlSearchNs((xmlDocPtr) doc, (xmlNodePtr) node, (xmlChar *) ns_name);
return (struct ast_xml_ns *) ns;
}
| int ast_xml_finish | ( | void | ) |
Cleanup library allocated global data.
| 0 | On success. |
| 1 | On error. |
Definition at line 44 of file xml.c.
Referenced by xmldoc_unload_documentation().
{
xmlCleanupParser();
return 0;
}
| void ast_xml_free_attr | ( | const char * | attribute | ) |
Free an attribute returned by ast_xml_get_attribute()
| attribute | pointer to be freed. |
Definition at line 172 of file xml.c.
Referenced by ast_xml_find_element(), ast_xmldoc_build_seealso(), pidf_validate_presence(), pidf_validate_tuple(), xmldoc_attribute_match(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), xmldoc_get_syntax_manager(), xmldoc_parse_argument(), xmldoc_parse_enumlist(), xmldoc_parse_optionlist(), xmldoc_parse_parameter(), xmldoc_parse_variable(), and xmldoc_parse_variablelist().
{
if (attribute) {
xmlFree((char *) attribute);
}
}
| void ast_xml_free_node | ( | struct ast_xml_node * | node | ) |
| void ast_xml_free_text | ( | const char * | text | ) |
Free a content element that was returned by ast_xml_get_text()
| text | text to be freed. |
Definition at line 179 of file xml.c.
Referenced by ast_xmldoc_build_seealso(), cc_esc_publish_handler(), xmldoc_get_formatted(), xmldoc_parse_para(), and xmldoc_parse_variable().
| const char* ast_xml_get_attribute | ( | struct ast_xml_node * | node, |
| const char * | attrname | ||
| ) |
Get a node attribute by name.
| node | Node where to search the attribute. |
| attrname | Attribute name. |
| NULL | on error |
| The | attribute value on success. |
Definition at line 186 of file xml.c.
Referenced by ast_xml_find_element(), ast_xmldoc_build_seealso(), pidf_validate_presence(), pidf_validate_tuple(), xmldoc_attribute_match(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), xmldoc_get_syntax_manager(), xmldoc_parse_argument(), xmldoc_parse_enumlist(), xmldoc_parse_optionlist(), xmldoc_parse_parameter(), xmldoc_parse_variable(), and xmldoc_parse_variablelist().
{
xmlChar *attrvalue;
if (!node) {
return NULL;
}
if (!attrname) {
return NULL;
}
attrvalue = xmlGetProp((xmlNode *) node, (xmlChar *) attrname);
return (const char *) attrvalue;
}
| struct ast_xml_doc* ast_xml_get_doc | ( | struct ast_xml_node * | node | ) | [read] |
| const char* ast_xml_get_ns_href | ( | struct ast_xml_ns * | ns | ) |
Definition at line 262 of file xml.c.
Referenced by pidf_validate_presence().
{
return (const char *) ((xmlNsPtr) ns)->href;
}
| struct ast_xml_node* ast_xml_get_root | ( | struct ast_xml_doc * | doc | ) | [read] |
Get the document root node.
| doc | Document reference |
| NULL | on error |
| The | root node on success. |
Definition at line 149 of file xml.c.
Referenced by ast_xmldoc_load_documentation(), cc_esc_publish_handler(), pidf_validate_presence(), and xmldoc_get_node().
{
xmlNode *root_node;
if (!doc) {
return NULL;
}
root_node = xmlDocGetRootElement((xmlDoc *) doc);
return (struct ast_xml_node *) root_node;
}
| const char* ast_xml_get_text | ( | struct ast_xml_node * | node | ) |
Get an element content string.
| node | Node from where to get the string. |
| NULL | on error. |
| The | text content of node. |
Definition at line 267 of file xml.c.
Referenced by ast_xmldoc_build_seealso(), cc_esc_publish_handler(), xmldoc_get_formatted(), xmldoc_parse_para(), and xmldoc_parse_variable().
{
if (!node) {
return NULL;
}
return (const char *) xmlNodeGetContent((xmlNode *) node);
}
| int ast_xml_init | ( | void | ) |
Initialize the XML library implementation. This function is used to setup everything needed to start working with the xml implementation.
| 0 | On success. |
| 1 | On error. |
Definition at line 37 of file xml.c.
Referenced by ast_xmldoc_load_documentation().
{
LIBXML_TEST_VERSION
return 0;
}
| struct ast_xml_doc* ast_xml_new | ( | void | ) | [read] |
Create a XML document.
| NULL | on error. |
| non-NULL | The allocated document structure. |
Definition at line 71 of file xml.c.
Referenced by ast_data_get_xml().
{
xmlDoc *doc;
doc = xmlNewDoc((const xmlChar *) "1.0");
return (struct ast_xml_doc *) doc;
}
| struct ast_xml_node* ast_xml_new_child | ( | struct ast_xml_node * | parent, |
| const char * | child_name | ||
| ) | [read] |
Add a child node inside a passed parent node.
| parent | The pointer of the parent node. |
| child_name | The name of the child node to add. |
| NULL | on error. |
| non-NULL | The created child node pointer. |
Definition at line 91 of file xml.c.
{
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_new_node | ( | const char * | name | ) | [read] |
Create a XML node.
| name | The name of the node to be created. |
| NULL | on error. |
| non-NULL | The allocated node structe. |
Definition at line 79 of file xml.c.
Referenced by ast_data_get_xml(), and data_get_xml_add_child().
| struct ast_xml_node* ast_xml_node_get_children | ( | struct ast_xml_node * | node | ) | [read] |
Get the node's children.
Definition at line 295 of file xml.c.
Referenced by ast_xmldoc_build_arguments(), ast_xmldoc_build_seealso(), ast_xmldoc_build_syntax(), cc_esc_publish_handler(), pidf_validate_presence(), pidf_validate_tuple(), xmldoc_build_field(), xmldoc_get_formatted(), xmldoc_get_node(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), xmldoc_get_syntax_manager(), xmldoc_has_inside(), xmldoc_has_nodes(), xmldoc_has_specialtags(), xmldoc_parse_argument(), xmldoc_parse_cmd_enumlist(), xmldoc_parse_enum(), xmldoc_parse_enumlist(), xmldoc_parse_option(), xmldoc_parse_optionlist(), xmldoc_parse_para(), xmldoc_parse_parameter(), xmldoc_parse_specialtags(), xmldoc_parse_variable(), and xmldoc_parse_variablelist().
{
return (struct ast_xml_node *) ((xmlNode *) node)->children;
}
| const char* ast_xml_node_get_name | ( | struct ast_xml_node * | node | ) |
Get the name of a node.
Definition at line 290 of file xml.c.
Referenced by ast_xml_find_element(), ast_xmldoc_build_arguments(), ast_xmldoc_build_seealso(), ast_xmldoc_build_syntax(), ast_xmldoc_load_documentation(), pidf_validate_presence(), pidf_validate_tuple(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), xmldoc_get_syntax_manager(), xmldoc_has_inside(), xmldoc_has_nodes(), xmldoc_has_specialtags(), xmldoc_parse_cmd_enumlist(), xmldoc_parse_enumlist(), xmldoc_parse_option(), xmldoc_parse_optionlist(), xmldoc_parse_para(), xmldoc_parse_parameter(), xmldoc_parse_specialtags(), xmldoc_parse_variable(), and xmldoc_parse_variablelist().
{
return (const char *) ((xmlNode *) node)->name;
}
| struct ast_xml_node* ast_xml_node_get_next | ( | struct ast_xml_node * | node | ) | [read] |
Get the next node in the same level.
Definition at line 300 of file xml.c.
Referenced by ast_xml_find_element(), ast_xmldoc_build_arguments(), ast_xmldoc_build_seealso(), ast_xmldoc_build_syntax(), pidf_validate_presence(), pidf_validate_tuple(), xmldoc_get_formatted(), xmldoc_get_node(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), xmldoc_get_syntax_manager(), xmldoc_has_inside(), xmldoc_has_nodes(), xmldoc_has_specialtags(), xmldoc_parse_argument(), xmldoc_parse_cmd_enumlist(), xmldoc_parse_enum(), xmldoc_parse_enumlist(), xmldoc_parse_option(), xmldoc_parse_optionlist(), xmldoc_parse_para(), xmldoc_parse_parameter(), xmldoc_parse_specialtags(), xmldoc_parse_variable(), and xmldoc_parse_variablelist().
{
return (struct ast_xml_node *) ((xmlNode *) node)->next;
}
| struct ast_xml_node* ast_xml_node_get_parent | ( | struct ast_xml_node * | node | ) | [read] |
| struct ast_xml_node* ast_xml_node_get_prev | ( | struct ast_xml_node * | node | ) | [read] |
| struct ast_xml_doc* ast_xml_open | ( | char * | filename | ) | [read] |
Open an XML document.
| filename | Document path. |
| NULL | on error. |
| The | ast_xml_doc reference to the open document. |
Definition at line 51 of file xml.c.
Referenced by ast_xmldoc_load_documentation().
{
xmlDoc *doc;
if (!filename) {
return NULL;
}
doc = xmlReadFile(filename, NULL, XML_PARSE_RECOVER);
if (doc) {
/* process xinclude elements. */
if (xmlXIncludeProcess(doc) < 0) {
xmlFreeDoc(doc);
return NULL;
}
}
return (struct ast_xml_doc *) doc;
}
| struct ast_xml_doc* ast_xml_read_memory | ( | char * | buffer, |
| size_t | size | ||
| ) | [read] |
Open an XML document that resides in memory.
| buffer | The address where the document is stored |
| size | The number of bytes in the document |
| NULL | on error. |
| The | ast_xml_doc reference to the open document. |
Definition at line 111 of file xml.c.
Referenced by sip_pidf_validate().
{
xmlDoc *doc;
if (!buffer) {
return NULL;
}
if (!(doc = xmlParseMemory(buffer, (int) size))) {
/* process xinclude elements. */
if (xmlXIncludeProcess(doc) < 0) {
xmlFreeDoc(doc);
return NULL;
}
}
return (struct ast_xml_doc *) doc;
}
| int ast_xml_set_attribute | ( | struct ast_xml_node * | node, |
| const char * | name, | ||
| const char * | value | ||
| ) |
Set an attribute to a node.
| node | In which node we want to insert the attribute. |
| name | The attribute name. |
| value | The attribute value. |
| 0 | on success. |
| -1 | on error. |
| void ast_xml_set_root | ( | struct ast_xml_doc * | doc, |
| struct ast_xml_node * | node | ||
| ) |
Specify the root node of a XML document.
| doc | The document pointer. |
| node | A pointer to the node we want to set as root node. |
Definition at line 140 of file xml.c.
Referenced by ast_data_get_xml().
{
if (!doc || !node) {
return;
}
xmlDocSetRootElement((xmlDoc *) doc, (xmlNode *) node);
}
| void ast_xml_set_text | ( | struct ast_xml_node * | node, |
| const char * | content | ||
| ) |
Set an element content string.
| node | Node from where to set the content string. |
| content | The text to insert in the node. |
Definition at line 276 of file xml.c.
Referenced by data_get_xml_add_child().
{
if (!node || !content) {
return;
}
xmlNodeSetContent((xmlNode *) node, (const xmlChar *) content);
}