45 #ifndef INCL_UTIL_NAD_H
46 #define INCL_UTIL_NAD_H 1
52 #ifdef HAVE_SYS_TYPES_H
53 # include <sys/types.h>
59 # ifdef JABBERD2_EXPORTS
60 # define JABBERD2_API __declspec(dllexport)
62 # define JABBERD2_API __declspec(dllimport)
65 # define JABBERD2_API extern
183 #define NAD_ENAME(N,E) (N->cdata + N->elems[E].iname)
184 #define NAD_ENAME_L(N,E) (N->elems[E].lname)
185 #define NAD_CDATA(N,E) (N->cdata + N->elems[E].icdata)
186 #define NAD_CDATA_L(N,E) (N->elems[E].lcdata)
187 #define NAD_ANAME(N,A) (N->cdata + N->attrs[A].iname)
188 #define NAD_ANAME_L(N,A) (N->attrs[A].lname)
189 #define NAD_AVAL(N,A) (N->cdata + N->attrs[A].ival)
190 #define NAD_AVAL_L(N,A) (N->attrs[A].lval)
191 #define NAD_NURI(N,NS) (N->cdata + N->nss[NS].iuri)
192 #define NAD_NURI_L(N,NS) (N->nss[NS].luri)
193 #define NAD_NPREFIX(N,NS) (N->cdata + N->nss[NS].iprefix)
194 #define NAD_NPREFIX_L(N,NS) (N->nss[NS].lprefix)
196 #define NAD_ENS(N,E) (N->elems[E].my_ns)
197 #define NAD_ANS(N,A) (N->attrs[A].my_ns)
struct nad_elem_st * elems
nad_t nad_new(void)
create a new nad
int nad_append_attr(nad_t nad, int ns, const char *name, const char *val)
attach new attr to the last elem
int nad_insert_elem(nad_t nad, int parent, int ns, const char *name, const char *cdata)
shove in a new child elem after the given one
int nad_find_elem(nad_t nad, int elem, int ns, const char *name, int depth)
locate the next elem at a given depth with an optional matching name
void nad_append_cdata(nad_t nad, const char *cdata, int len, int depth)
append new cdata to the last elem
struct nad_attr_st * attrs
int nad_add_namespace(nad_t nad, const char *uri, const char *prefix)
bring a new namespace into scope
int nad_append_elem(nad_t nad, int ns, const char *name, int depth)
create a new elem on the list
void nad_free(nad_t nad)
free that nad
void nad_wrap_elem(nad_t nad, int elem, int ns, const char *name)
wrap an element with another element
nad_t nad_copy(nad_t nad)
copy a nad
nad_t nad_deserialize(const char *buf)
void nad_serialize(nad_t nad, char **buf, int *len)
nads serialize to a buffer of this form:
void nad_set_attr(nad_t nad, int elem, int ns, const char *name, const char *val, int vallen)
create, update, or zap any matching attr on this elem
nad_t nad_parse(const char *buf, int len)
create a nad from raw xml
int nad_insert_nad(nad_t dest, int delem, nad_t src, int selem)
insert part of a nad into another nad
int nad_find_namespace(nad_t nad, int elem, const char *uri, const char *prefix)
get a matching ns on this elem, both uri and optional prefix
void nad_drop_elem(nad_t nad, int elem)
remove an element (and its subelements)
int nad_find_attr(nad_t nad, int elem, int ns, const char *name, const char *val)
get a matching attr on this elem, both name and optional val
int nad_append_namespace(nad_t nad, int elem, const char *uri, const char *prefix)
declare a namespace on an already-existing element
int nad_find_elem_path(nad_t nad, int elem, int ns, const char *name)
find elem using XPath like query name – "name" for the child tag of that name "name/name" for a sub c...
void nad_print(nad_t nad, int elem, const char **xml, int *len)
create a string representation of the given element (and children), point references to it ...
int nad_find_scoped_namespace(nad_t nad, const char *uri, const char *prefix)
find a namespace in scope