| /* $Header: /pjproject-0.3/pjlib/include/pj/xml.h 4 10/14/05 12:26a Bennylp $ */ |
| |
| #ifndef __PJ_XML_H__ |
| #define __PJ_XML_H__ |
| |
| /** |
| * @file xml.h |
| * @brief PJLIB XML Parser/Helper. |
| */ |
| |
| #include <pj/types.h> |
| #include <pj/list.h> |
| |
| PJ_BEGIN_DECL |
| |
| /** |
| * @defgroup PJ_XML XML Parser/Helper. |
| * @ingroup PJ |
| * @{ |
| */ |
| |
| /** Typedef for XML attribute. */ |
| typedef struct pj_xml_attr pj_xml_attr; |
| |
| /** Typedef for XML nodes. */ |
| typedef struct pj_xml_node pj_xml_node; |
| |
| /** This structure declares XML attribute. */ |
| struct pj_xml_attr |
| { |
| PJ_DECL_LIST_MEMBER(pj_xml_attr) |
| pj_str_t name; /**< Attribute name. */ |
| pj_str_t value; /**< Attribute value. */ |
| }; |
| |
| /** This structure describes XML node head inside XML node structure. |
| */ |
| typedef struct pj_xml_node_head |
| { |
| PJ_DECL_LIST_MEMBER(pj_xml_node) |
| } pj_xml_node_head; |
| |
| /** This structure describes XML node. */ |
| struct pj_xml_node |
| { |
| PJ_DECL_LIST_MEMBER(pj_xml_node) /** List @a prev and @a next member */ |
| pj_str_t name; /** Node name. */ |
| pj_xml_attr attr_head; /** Attribute list. */ |
| pj_xml_node_head node_head; /** Node list. */ |
| pj_str_t content; /** Node content. */ |
| }; |
| |
| /** |
| * Parse XML message into XML document with a single root node. The parser |
| * is capable of parsing XML processing instruction construct ("<?") and |
| * XML comments ("<!--"), however such constructs will be ignored and will not |
| * be included in the resulted XML node tree. |
| * |
| * @param pool Pool to allocate memory from. |
| * @param msg The XML message to parse. |
| * @param len The length of the message. |
| * |
| * @return XML root node, or NULL if the XML document can not be parsed. |
| */ |
| PJ_DECL(pj_xml_node*) pj_xml_parse( pj_pool_t *pool, char *msg, pj_size_t len); |
| |
| |
| /** |
| * Print XML into XML message. Note that the function WILL NOT NULL terminate |
| * the output. |
| * |
| * @param node The XML node to print. |
| * @param buf Buffer to hold the output message. |
| * @param len The length of the buffer. |
| * @param prolog If set to nonzero, will print XML prolog ("<?xml..") |
| * |
| * @return The size of the printed message, or -1 if there is not |
| * sufficient space in the buffer to print the message. |
| */ |
| PJ_DECL(int) pj_xml_print( const pj_xml_node *node, char *buf, pj_size_t len, |
| pj_bool_t include_prolog); |
| |
| /** |
| * Add node to another node. |
| * |
| * @param parent Parent node. |
| * @param node Node to be added to parent. |
| */ |
| PJ_DECL(void) pj_xml_add_node( pj_xml_node *parent, pj_xml_node *node ); |
| |
| |
| /** |
| * Add attribute to a node. |
| * |
| * @param node Node. |
| * @param attr Attribute to add to node. |
| */ |
| PJ_DECL(void) pj_xml_add_attr( pj_xml_node *node, pj_xml_attr *attr ); |
| |
| /** |
| * Find first node with the specified name. |
| * |
| * @param parent Parent node. |
| * @param name Node name to find. |
| * |
| * @return XML node found or NULL. |
| */ |
| PJ_DECL(pj_xml_node*) pj_xml_find_node(pj_xml_node *parent, const pj_str_t *name); |
| |
| /** |
| * Find first node with the specified name. |
| * |
| * @param parent Parent node. |
| * @param name Node name to find. |
| * |
| * @return XML node found or NULL. |
| */ |
| PJ_DECL(pj_xml_node*) pj_xml_find_next_node(pj_xml_node *parent, pj_xml_node *node, |
| const pj_str_t *name); |
| |
| /** |
| * Find first attribute within a node with the specified name and optional value. |
| * |
| * @param node XML Node. |
| * @param name Attribute name to find. |
| * @param value Optional value to match. |
| * |
| * @return XML attribute found, or NULL. |
| */ |
| PJ_DECL(pj_xml_attr*) pj_xml_find_attr(pj_xml_node *node, const pj_str_t *name, |
| const pj_str_t *value); |
| |
| |
| /** |
| * Find a direct child node with the specified name and match the function. |
| * |
| * @param node Parent node. |
| * @param name Optional name. |
| * @param data Data to be passed to matching function. |
| * @param match Optional matching function. |
| * |
| * @return The first matched node, or NULL. |
| */ |
| PJ_DECL(pj_xml_node*) pj_xml_find( pj_xml_node *parent, const pj_str_t *name, |
| const void *data, |
| pj_bool_t (*match)(pj_xml_node *, const void*)); |
| |
| |
| /** |
| * @} |
| */ |
| |
| PJ_END_DECL |
| |
| #endif /* __PJ_XML_H__ */ |