| /* Copyright (C) 2001 by First Peer, Inc. All rights reserved. |
| ** |
| ** Redistribution and use in source and binary forms, with or without |
| ** modification, are permitted provided that the following conditions |
| ** are met: |
| ** 1. Redistributions of source code must retain the above copyright |
| ** notice, this list of conditions and the following disclaimer. |
| ** 2. Redistributions in binary form must reproduce the above copyright |
| ** notice, this list of conditions and the following disclaimer in the |
| ** documentation and/or other materials provided with the distribution. |
| ** 3. The name of the author may not be used to endorse or promote products |
| ** derived from this software without specific prior written permission. |
| ** |
| ** THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
| ** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
| ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| ** OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| ** HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| ** SUCH DAMAGE. */ |
| |
| |
| /*========================================================================= |
| ** Abstract XML Parser Interface |
| **========================================================================= |
| ** This file provides an abstract interface to the XML parser. For now, |
| ** this interface is implemented by expat, but feel free to change it |
| ** if necessary. |
| */ |
| |
| |
| /*========================================================================= |
| ** xml_element |
| **========================================================================= |
| ** This data structure represents an XML element. We provide no more API |
| ** than we'll need in xmlrpc_parse.c. |
| ** |
| ** The pointers returned by the various accessor methods belong to the |
| ** xml_element structure. Do not free them, and do not use them after |
| ** the xml_element has been destroyed. |
| */ |
| |
| /* You'll need to finish defining struct _xml_element elsewhere. */ |
| typedef struct _xml_element xml_element; |
| |
| /* Destroy an xml_element. */ |
| void xml_element_free (xml_element *elem); |
| |
| /* Return a pointer to the element's name. Do not free this pointer! |
| ** This pointer should point to standard ASCII or UTF-8 data. */ |
| char *xml_element_name (xml_element *elem); |
| |
| /* Return the xml_element's CDATA. Do not free this pointer! |
| ** This pointer should point to standard ASCII or UTF-8 data. |
| ** The implementation is allowed to concatenate all the CDATA in the |
| ** element regardless of child elements. Alternatively, if there are |
| ** any child elements, the implementation is allowed to dispose |
| ** of whitespace characters. |
| ** The value returned by xml_element_cdata should be '\0'-terminated |
| ** (although it may contain other '\0' characters internally). |
| ** xml_element_cdata_size should not include the final '\0'. */ |
| size_t xml_element_cdata_size (xml_element *elem); |
| char *xml_element_cdata (xml_element *elem); |
| |
| /* Return the xml_element's child elements. Do not free this pointer! */ |
| size_t xml_element_children_size (xml_element *elem); |
| xml_element **xml_element_children (xml_element *elem); |
| |
| |
| /*========================================================================= |
| ** xml_parse |
| **========================================================================= |
| ** Parse a chunk of XML data and return the top-level element. If this |
| ** routine fails, it will return NULL and set up the env appropriately. |
| ** You are responsible for calling xml_element_free on the returned pointer. |
| */ |
| |
| xml_element *xml_parse (xmlrpc_env *env, const char *xml_data, int xml_len); |