Mon Sep 20 2010 00:34:12

Asterisk developer's documentation


Defines | Functions

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:
doc The 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:
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).
Return values:
NULL if not found
The node 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:
0 On success.
1 On 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  ) 

Free an attribute returned by ast_xml_get_attribute().

Parameters:
data pointer to be freed.

Definition at line 107 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().

{
   if (attribute) {
      xmlFree((char *) attribute);
   }
}

void ast_xml_free_node ( struct ast_xml_node *  node  ) 

Free node.

Parameters:
node Node 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:
text text 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:
node Node where to search the attribute.
attrname Attribute name.
Return values:
NULL on error
The attribute 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:
doc Document reference
Return values:
NULL on error
The root 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:
node Node from where to get the string.
Return values:
NULL on error.
The text 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:
0 On success.
1 On 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_children ( struct ast_xml_node *  node  )  [read]
const char* ast_xml_node_get_name ( struct ast_xml_node *  node  ) 
struct ast_xml_node* ast_xml_node_get_next ( struct ast_xml_node *  node  )  [read]
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:
filename Document path.
Return values:
NULL on error.
The ast_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;
}