00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef APR_XML_H
00021 #define APR_XML_H
00022
00028 #include "apr_pools.h"
00029 #include "apr_tables.h"
00030 #include "apr_file_io.h"
00031
00032 #include "apu.h"
00033
00034 #ifdef __cplusplus
00035 extern "C" {
00036 #endif
00037
00042
00043
00044
00045
00047 typedef struct apr_text apr_text;
00048
00050 struct apr_text {
00052 const char *text;
00054 struct apr_text *next;
00055 };
00056
00058 typedef struct apr_text_header apr_text_header;
00059
00061 struct apr_text_header {
00063 apr_text *first;
00065 apr_text *last;
00066 };
00067
00074 APU_DECLARE(void) apr_text_append(apr_pool_t *p, apr_text_header *hdr,
00075 const char *text);
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 #define APR_XML_NS_DAV_ID 0
00131 #define APR_XML_NS_NONE -10
00133 #define APR_XML_NS_ERROR_BASE -100
00135 #define APR_XML_NS_IS_ERROR(e) ((e) <= APR_XML_NS_ERROR_BASE)
00136
00138 typedef struct apr_xml_attr apr_xml_attr;
00140 typedef struct apr_xml_elem apr_xml_elem;
00142 typedef struct apr_xml_doc apr_xml_doc;
00143
00145 struct apr_xml_attr {
00147 const char *name;
00149 int ns;
00150
00152 const char *value;
00153
00155 struct apr_xml_attr *next;
00156 };
00157
00159 struct apr_xml_elem {
00161 const char *name;
00163 int ns;
00165 const char *lang;
00166
00168 apr_text_header first_cdata;
00170 apr_text_header following_cdata;
00171
00173 struct apr_xml_elem *parent;
00175 struct apr_xml_elem *next;
00177 struct apr_xml_elem *first_child;
00179 struct apr_xml_attr *attr;
00180
00181
00183 struct apr_xml_elem *last_child;
00185 struct apr_xml_ns_scope *ns_scope;
00186
00187
00189 void *priv;
00190 };
00191
00193 #define APR_XML_ELEM_IS_EMPTY(e) ((e)->first_child == NULL && \
00194 (e)->first_cdata.first == NULL)
00195
00197 struct apr_xml_doc {
00199 apr_xml_elem *root;
00201 apr_array_header_t *namespaces;
00202 };
00203
00205 typedef struct apr_xml_parser apr_xml_parser;
00206
00212 APU_DECLARE(apr_xml_parser *) apr_xml_parser_create(apr_pool_t *pool);
00213
00224 APU_DECLARE(apr_status_t) apr_xml_parse_file(apr_pool_t *p,
00225 apr_xml_parser **parser,
00226 apr_xml_doc **ppdoc,
00227 apr_file_t *xmlfd,
00228 apr_size_t buffer_length);
00229
00230
00239 APU_DECLARE(apr_status_t) apr_xml_parser_feed(apr_xml_parser *parser,
00240 const char *data,
00241 apr_size_t len);
00242
00251 APU_DECLARE(apr_status_t) apr_xml_parser_done(apr_xml_parser *parser,
00252 apr_xml_doc **pdoc);
00253
00261 APU_DECLARE(char *) apr_xml_parser_geterror(apr_xml_parser *parser,
00262 char *errbuf,
00263 apr_size_t errbufsize);
00264
00265
00282 APU_DECLARE(void) apr_xml_to_text(apr_pool_t *p, const apr_xml_elem *elem,
00283 int style, apr_array_header_t *namespaces,
00284 int *ns_map, const char **pbuf,
00285 apr_size_t *psize);
00286
00287
00288 #define APR_XML_X2T_FULL 0
00289 #define APR_XML_X2T_INNER 1
00290 #define APR_XML_X2T_LANG_INNER 2
00291 #define APR_XML_X2T_FULL_NS_LANG 3
00299 APU_DECLARE(const char *) apr_xml_empty_elem(apr_pool_t *p,
00300 const apr_xml_elem *elem);
00301
00312 APU_DECLARE(const char *) apr_xml_quote_string(apr_pool_t *p, const char *s,
00313 int quotes);
00314
00320 APU_DECLARE(void) apr_xml_quote_elem(apr_pool_t *p, apr_xml_elem *elem);
00321
00322
00323
00330 APU_DECLARE(int) apr_xml_insert_uri(apr_array_header_t *uri_array,
00331 const char *uri);
00332
00334 #define APR_XML_GET_URI_ITEM(ary, i) (((const char * const *)(ary)->elts)[i])
00335
00336 #ifdef __cplusplus
00337 }
00338 #endif
00339
00340 #endif