Fri Jul 15 2011 12:03:12

Asterisk developer's documentation


xml.c File Reference

XML abstraction layer. More...

#include "asterisk.h"
#include "asterisk/xml.h"
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <libxml/xinclude.h>
Include dependency graph for xml.c:

Go to the source code of this file.

Defines

#define _POSIX_C_SOURCE   200112L

Functions

void ast_xml_close (struct ast_xml_doc *doc)
 Close an already open document and free the used structure.
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.
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_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_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.

Detailed Description

XML abstraction layer.

Author:
Eliel C. Sardanons (LU1ALY) <eliels@gmail.com>

Definition in file xml.c.


Define Documentation

#define _POSIX_C_SOURCE   200112L

Definition at line 31 of file xml.c.


Function Documentation

void ast_xml_close ( struct ast_xml_doc *  doc)

Close an already open document and free the used structure.

Return values:
docThe document reference.

Definition at line 73 of file xml.c.

Referenced by ast_xmldoc_load_documentation(), and xmldoc_unload_documentation().

{
   if (!doc) {
      return;
   }

   xmlFreeDoc((xmlDoc *) doc);
   doc = NULL;
}
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.

Parameters:
nodeThis is the node starting point.
nameNode name to find.
attrnameattribute name to match (if NULL it won't be matched).
attrvalueattribute value to match (if NULL it won't be matched).
Return values:
NULLif not found
Thenode on success.

Definition at line 138 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 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;
}
int ast_xml_finish ( void  )

Cleanup library allocated global data.

Return values:
0On success.
1On error.

Definition at line 46 of file xml.c.

Referenced by xmldoc_unload_documentation().

{
   xmlCleanupParser();

   return 0;
}
void ast_xml_free_attr ( const char *  attribute)
void ast_xml_free_node ( struct ast_xml_node *  node)

Free node.

Parameters:
nodeNode to be released.

Definition at line 97 of file xml.c.

{
   if (!node) {
      return;
   }

   xmlFreeNode((xmlNode *) node);
   node = NULL;
}
void ast_xml_free_text ( const char *  text)

Free a content element that was returned by ast_xml_get_text()

Parameters:
texttext to be freed.

Definition at line 114 of file xml.c.

Referenced by ast_xmldoc_build_seealso(), xmldoc_get_formatted(), xmldoc_parse_para(), and xmldoc_parse_variable().

{
   if (text) {
      xmlFree((char *) text);
   }
}
const char* ast_xml_get_attribute ( struct ast_xml_node *  node,
const char *  attrname 
)

Get a node attribute by name.

Parameters:
nodeNode where to search the attribute.
attrnameAttribute name.
Return values:
NULLon error
Theattribute value on success.

Definition at line 121 of file xml.c.

Referenced by ast_xml_find_element(), ast_xmldoc_build_seealso(), xmldoc_get_node(), xmldoc_get_syntax_cmd(), xmldoc_get_syntax_fun(), 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_node* ast_xml_get_root ( struct ast_xml_doc *  doc) [read]

Get the document root node.

Parameters:
docDocument reference
Return values:
NULLon error
Theroot node on success.

Definition at line 84 of file xml.c.

Referenced by ast_xmldoc_load_documentation(), 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.

Parameters:
nodeNode from where to get the string.
Return values:
NULLon error.
Thetext content of node.

Definition at line 170 of file xml.c.

Referenced by ast_xmldoc_build_seealso(), 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.

Return values:
0On success.
1On error.

Definition at line 39 of file xml.c.

Referenced by ast_xmldoc_load_documentation().

{
   LIBXML_TEST_VERSION

   return 0;
}
struct ast_xml_node* ast_xml_node_get_parent ( struct ast_xml_node *  node) [read]

Get the parent of a specified node.

Definition at line 199 of file xml.c.

{
   return (struct ast_xml_node *) ((xmlNode *) node)->parent;
}
struct ast_xml_node* ast_xml_node_get_prev ( struct ast_xml_node *  node) [read]

Get the previous node in the same leve.

Definition at line 194 of file xml.c.

{
   return (struct ast_xml_node *) ((xmlNode *) node)->prev;
}
struct ast_xml_doc* ast_xml_open ( char *  filename) [read]

Open an XML document.

Parameters:
filenameDocument path.
Return values:
NULLon error.
Theast_xml_doc reference to the open document.

Definition at line 53 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;
}