?? xml.h
字號:
/* $Id: xml.h 754 2006-10-08 13:56:07Z bennylp $ *//* * Copyright (C) 2003-2005 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#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_TINY_XML Mini/Tiny XML Parser/Helper * @ingroup PJLIB_UTIL * @{ *//** 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); /**< Standard list elements. */ 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); /**< Standard list elements. */} 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);/** * Clone XML node and all subnodes. * * @param pool Pool to allocate memory for new nodes. * @param rhs The node to clone. * * @return Cloned XML node, or NULL on fail. */PJ_DECL(pj_xml_node*) pj_xml_clone( pj_pool_t *pool, const pj_xml_node *rhs);/** * Create an empty node. * * @param pool Pool. * @param name Node name. * * @return The new node. */PJ_DECL(pj_xml_node*) pj_xml_node_new(pj_pool_t *pool, const pj_str_t *name);/** * Create new XML attribute. * * @param pool Pool. * @param name Attribute name. * @param attr Attribute value. * * @return The new XML attribute. */PJ_DECL(pj_xml_attr*) pj_xml_attr_new(pj_pool_t *pool, const pj_str_t *name, const pj_str_t *value);/** * 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__ */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -