添加一个节点到树中
void mxmlAdd (
mxml_node_t *parent,
int where,
mxml_node_t *child,
mxml_node_t *node
);
添加一个指定的节点到父节点,如果child参数不是NULL,将这个新的节点添加到指定的"child"的前面或者后面(由where参数决定)。如果child参数是NULL,把新节点添加到子节点列表的最前面(MXML_ADD_BEFORE)或者时子节点列表的最后面(MXML_ADD_AFTER)。常量MXML_ADD_TO_PARENT 可以被用来指定一个NULL的child指针。
删除一个节点和它的所有的子节点。
void mxmlDelete (
mxml_node_t *node
);
如果这个指定的节点有一个父节点,这个函数首先使用mxmlRemove() 函数从它的父节点中移除自己。
删除一个参数
void mxmlElementDeleteAttr (
mxml_node_t *node,
const char *name
);
获取一个参数
const char *mxmlElementGetAttr (
mxml_node_t *node,
const char *name
);
属性值或者NULL
如果node参数不是一个XML元素或者指定的属性名不存在则返回NULL。
设置一个属性。
void mxmlElementSetAttr (
mxml_node_t *node,
const char *name,
const char *value
);
如果这个属性名已经存在,这个属性的值将被替换为新的字符串值。这个字符串值将被拷贝到这个XML元素节点,如果这个节点不是一个XML元素,则这个函数不做任何事。
设置一个XML元素属性使用一个格式化的值。
void mxmlElementSetAttrf (
mxml_node_t *node,
const char *name,
const char *format,
...
);
如果这个属性名已经存在,这个属性的值将被替换为新的格式化字符串值。这个格式化后字符串值将被拷贝到这个XML元素节点,如果这个节点不是一个XML元素,则这个函数不做任何事。
添加一个回调函数来将XML实体转换为Unicode编码字符。
int mxmlEntityAddCallback (void);
0 成功, -1 失败
获取一个字符值对应的XML实体名字。
const char *mxmlEntityGetName (
int val
);
XML实体名字或者NULL
如果val不需要被标识为一个命名的XML实体,返回NULL。
获取一个代表到一个XML命名实体的字符。
int mxmlEntityGetValue (
const char *name
);
字符值或者-1代表错误
XML实体名字总是可以被关联到一个数字常量,如果这个名字未知则返回-1。
删除一个XML实体回调。
void mxmlEntityRemoveCallback (void);
搜索一个命名的XML元素。
mxml_node_t *mxmlFindElement (
mxml_node_t *node,
mxml_node_t *top,
const char *name,
const char *attr,
const char *value,
int descend
);
XMl元素节点或者NULL
搜索可以被XML元素名,属性名和属性值所限定;任何名字或者值等于NULL被处理就相当于通配符,所以使用不同的搜索方法可以被实现用来查看所有的指定名称的XML元素或者是所有的具有指定属性的XML元素。参数: descend 确定了是否向下搜索子节点;通常你将使用 MXML_DESCEND_FIRST作为第一次搜索,然后使用使用 MXML_NO_DESCEND来发现更多的这个节点的直接子节点。 top 节点参数约束了搜索在一个指定节点的子节点中。
删除一个索引。
void mxmlIndexDelete (
mxml_index_t *ind
);
返回索引中的下一个节点。
mxml_node_t *mxmlIndexEnum (
mxml_index_t *ind
);
下一个节点或者NULL代表没有更多的节点
返回节点顺序将按照索引的排序被返回。
搜索下一个匹配的节点。
mxml_node_t *mxmlIndexFind (
mxml_index_t *ind,
const char *element,
const char *value
);
节点或者NULL代表没有发现。
你在第一次使用一个特定的包含"element"和"value"字符串的集合来调用这个函数之前应该首先调用mxmlIndexReset()函数。如果"element"和"value"同时等于NULL则相当于调用了mxmlIndexEnum()函数。
创建一个新的索引。
mxml_index_t *mxmlIndexNew (
mxml_node_t *node,
const char *element,
const char *attr
);
新的索引
被创建的索引将包含具备指定的元素名和/或属性所有的节点。如果"element" 和"attr"同时等于NULL,索引将包含一个被排序的完整节点树的列表。节点被按照XML元素名和选择的属性值(如果"attr"参数不等于NULL)进行排序。
重设索引中的枚举/搜索指针并且返回索引中的第一个节点。
mxml_node_t *mxmlIndexReset (
mxml_index_t *ind
);
第一个节点或者NULL代表索引为空。
这个函数需要被首先调用,在第一次使用函数mxmlIndexEnum() 或 mxmlIndexFind()之前。
载入一个文件描述符到一个XML节点树。
mxml_node_t *mxmlLoadFd (
mxml_node_t *top,
int fd,
mxml_load_cb_t cb
);
第一个节点或者NULL代表文件不能被读取。
在指定文件中的所有节点将被添加到所指定的顶部节点。如果没有"top"顶部节点被提供,这个XML文件必须是规范的并且整个文件只有一个父节点为 。 回调函数返回的值类型将被使用到子节点。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点。
常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和 MXML_TEXT_CALLBACK 定义了将载入指定类型的子节点。
载入一个文件到一个XML节点树。
mxml_node_t *mxmlLoadFile (
mxml_node_t *top,
FILE *fp,
mxml_load_cb_t cb
);
第一个节点或者NULL代表文件不能被读取。
在指定文件中的所有节点将被添加到所指定的顶部节点。如果没有"top"顶部节点被提供,这个XML文件必须是规范的并且整个文件只有一个父节点为 。 回调函数返回的值类型将被使用到子节点。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点.
常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和 MXML_TEXT_CALLBACK 定义了将载入指定类型的子节点。
载入一个文件到一个XML节点树。
mxml_node_t *mxmlLoadString (
mxml_node_t *top,
const char *s,
mxml_load_cb_t cb
);
第一个节点或者NULL代表字符串中有错误。
在指定字符串中的所有节点将被添加到所指定的顶部节点。如果没有"top"顶部节点被提供,这个XML字符串必须是规范的并且整个文件只有一个父节点为 。 回调函数返回的值类型将被使用到子节点。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点.
T常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和 MXML_TEXT_CALLBACK 定义了将载入指定类型的子节点。
创建一个新的CDATA 节点.
mxml_node_t *mxmlNewCDATA (
mxml_node_t *parent,
const char *data
);
新的节点
新的CDATA节点将被添加到指定父节点的子节点列表的最后,常量 MXML_NO_PARENT 可以被用来指定新的CDATA节点没有父节点。数据字符串必须是以空字符结尾,并被拷贝到新的CDATA节点。CDATA节点使用 MXML_ELEMENT 节点类型。
创建一个新的用户自定义数据节点。
mxml_node_t *mxmlNewCustom (
mxml_node_t *parent,
void *data,
mxml_custom_destroy_cb_t destroy
);
新节点
新的自定义节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的自定义节点没有父节点。NULL可以被通过,当数据节点不是动态分配或者是独立管理时。
创建一个新的XML元素节点。
mxml_node_t *mxmlNewElement (
mxml_node_t *parent,
const char *name
);
新节点
新的XML元素节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的XML元素节点没有父节点。
创建一个新的整数节点。
mxml_node_t *mxmlNewInteger (
mxml_node_t *parent,
int integer
);
新节点
新的整数节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的整数节点没有父节点。
创建一个新的不透明字符串节点
mxml_node_t *mxmlNewOpaque (
mxml_node_t *parent,
const char *opaque
);
新节点
新的不透明字符串节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的不透明字符串节点没有父节点。这个字符串必须是空字符结尾并被拷贝到新节点。
创建一个新的浮点数节点。
mxml_node_t *mxmlNewReal (
mxml_node_t *parent,
double real
);
新节点
新的浮点数节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的浮点数节点没有父节点。
创建新的文本分段节点。
mxml_node_t *mxmlNewText (
mxml_node_t *parent,
int whitespace,
const char *string
);
新节点
新的文本节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的文本节点没有父节点。参数:whitespace被用在指定是否在这个节点前面有前导空格。文本字符串必须时以空字符结尾并被拷贝到新的节点。
创建一个新的格式化的文本分段节点
mxml_node_t *mxmlNewTextf (
mxml_node_t *parent,
int whitespace,
const char *format,
...
);
新节点
新的文本节点将被添加到指定父节点的子节点列表的最后。常量 MXML_NO_PARENT 可以被用来指定新的文本节点没有父节点。参数:whitespace被用在指定是否在这个节点前面有前导空格。格式化字符串必须时以空字符结尾并被格式化到新的节点。
创建一个新的XML文档树。
mxml_node_t *mxmlNewXML (
const char *version
);
新的 "?xml" 节点
参数 "version" 指定了放在"?xml" 元素节点中的版本号。如果为NULL则假定为 "version 1.0"。
释放一个节点。
int mxmlRelease (
mxml_node_t *node
);
新的引用计数
当引用计数为0时,这个节点(以及所有子节点)被通过函数 mxmlDelete() 所删除。
移除一个节点从它的父节点中。
void mxmlRemove (
mxml_node_t *node
);
不释放节点使用的内存,使用函数 mxmlDelete() 来释放。如果这个节点没有父节点则这个函数不做任何事。
保留一个节点
int mxmlRetain (
mxml_node_t *node
);
新的引用计数
使用SAX回调从一个文件描述符中加载数据到一个XML节点树。
mxml_node_t *mxmlSAXLoadFd (
mxml_node_t *top,
int fd,
mxml_load_cb_t cb,
mxml_sax_cb_t sax_cb,
void *sax_data
);
第一个节点或者NULL 代表文件不能被读取。
在指定文件中的节点将被添加到指定的顶级节点中。如果"top"节点没有提供,这个XML文件必须是规范的并且整个文件只有一个父节点为 。回调函数"cb"返回子节点的值类型。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点。
常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和MXML_TEXT_CALLBACK 被定义用于加载指定类型的子节点。
在SAX 回调函数中("sax_cb"),对于所有节点都必须调用mxmlRetain()函数用于保留为以后使用。否则,节点将在父节点被关闭时或者到达数据、注释、CDATA和指令节点时被删除。
使用SAX回调从一个文件中加载数据到一个XML节点树。
mxml_node_t *mxmlSAXLoadFile (
mxml_node_t *top,
FILE *fp,
mxml_load_cb_t cb,
mxml_sax_cb_t sax_cb,
void *sax_data
);
第一个节点或者NULL 代表文件不能被读取。
在指定文件中的节点将被添加到指定的顶级节点中。如果"top"节点没有提供,这个XML文件必须是规范的并且整个文件只有一个父节点为 。回调函数"cb"返回子节点的值类型。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点。
常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和MXML_TEXT_CALLBACK 被定义用于加载指定类型的子节点。
在SAX 回调函数中("sax_cb"),对于所有节点都必须调用mxmlRetain()函数用于保留为以后使用。否则,节点将在父节点被关闭时或者到达数据、注释、CDATA和指令节点时被删除。
使用SAX回调从一个字符串中加载数据到一个XML节点树。
mxml_node_t *mxmlSAXLoadString (
mxml_node_t *top,
const char *s,
mxml_load_cb_t cb,
mxml_sax_cb_t sax_cb,
void *sax_data
);
第一个节点或者NULL 代表文件不能被读取。
在指定字符串中的节点将被添加到指定的顶级节点中。如果"top"节点没有提供,这个XML字符串必须是规范的并且整个文件只有一个父节点为 。回调函数"cb"返回子节点的值类型。如果 MXML_NO_CALLBACK 参数被指定,那么所有的子节点将都会是MXML_ELEMENT 或者 MXML_TEXT 其中之一的节点。
常量 MXML_INTEGER_CALLBACK, MXML_OPAQUE_CALLBACK, MXML_REAL_CALLBACK, 和MXML_TEXT_CALLBACK 被定义用于加载指定类型的子节点。
在SAX 回调函数中("sax_cb"),对于所有节点都必须调用mxmlRetain()函数用于保留为以后使用。否则,节点将在父节点被关闭时或者到达数据、注释、CDATA和指令节点时被删除。
保存一个XML节点树到一个内部分配的字符串。
char *mxmlSaveAllocString (
mxml_node_t *node,
mxml_save_cb_t cb
);
分配的字符串或者 NULL
这个函数返回一个指向字符串的指针包含了描述整个XML节点树的文本。当你使用完这个字符串后需要使用free()函数来释放。如果这个节点产生了一个空字符或者字符串分配失败将返回NULL。
回调函数参数指定了一个函数用来在每个XML元素之前或者之后返回一个空白字符串或者NULL。如果指定了MXML_NO_CALLBACK,空格将仅被添加到具有前导空格的MXML_TEXT节点前面(node->value->text->whitespace = 1)和在一个打开XML元素标签的属性名称前面。
保存一个XML节点树到一个文件描述符。
int mxmlSaveFd (
mxml_node_t *node,
int fd,
mxml_save_cb_t cb
);
成功返回 0,错误返回 -1。
回调函数参数指定了一个函数用来在每个XML元素之前或者之后返回一个空白字符串或者NULL。如果指定了MXML_NO_CALLBACK,空格将仅被添加到具有前导空格的MXML_TEXT节点前面(node->value->text->whitespace = 1)和在一个打开XML元素标签的属性名称前面。
保存一个XML节点树到一个文件。
int mxmlSaveFile (
mxml_node_t *node,
FILE *fp,
mxml_save_cb_t cb
);
成功返回 0,错误返回 -1。
回调函数参数指定了一个函数用来在每个XML元素之前或者之后返回一个空白字符串或者NULL。如果指定了MXML_NO_CALLBACK,空格将仅被添加到具有前导空格的MXML_TEXT节点前面(node->value->text->whitespace = 1)和在一个打开XML元素标签的属性名称前面。
保存一个XML节点树到一个字符串。
int mxmlSaveString (
mxml_node_t *node,
char *buffer,
int bufsize,
mxml_save_cb_t cb
);
字符串大小
这个函数返回字符串需要字节总数,但是最多拷贝(bufsize-1)个字符到指定的buffer中。
设置一个CDATA元素节点的名称。
int mxmlSetCDATA (
mxml_node_t *node,
const char *data
);
成功返回 0,失败返回 -1。
如果这个节点不是一个CDATA节点则节点不发生改变。
对一个用户自定义数据节点设置数据和销毁回调函数。
int mxmlSetCustom (
mxml_node_t *node,
void *data,
mxml_custom_destroy_cb_t destroy
);
成功返回 0,失败返回 -1。
如果这个节点不是一个用户自定义节点则节点不发生改变。
设置对于自定义数据的处理回调函数。
void mxmlSetCustomHandlers (
mxml_custom_load_cb_t load,
mxml_custom_save_cb_t save
);
加载回调函数接收一个节点指针和数据字符串,成功时必须返回 0,错误时返回一个非0值。
保存回调函数接收一个节点指针,成功时必须返回一个使用malloc分配的字符串,错误时返回NULL。
设置XML元素节点的名字。
int mxmlSetElement (
mxml_node_t *node,
const char *name
);
成功返回 0,失败返回 -1。
如果这个节点不是一个XML元素节点则节点不发生改变。
设置错误信息回调函数。
void mxmlSetErrorCallback (
mxml_error_cb_t cb
);
设置一个整数节点的值。
int mxmlSetInteger (
mxml_node_t *node,
int integer
);
成功返回 0,失败返回 -1。
如果这个节点不是一个整数节点则节点不发生改变。
设置一个不透明字符串节点的值。
int mxmlSetOpaque (
mxml_node_t *node,
const char *opaque
);
成功返回 0,失败返回 -1。
如果这个节点不是一个不透明字符串节点则节点不发生改变。
设置一个浮点数节点的值。
int mxmlSetReal (
mxml_node_t *node,
double real
);
成功返回 0,失败返回 -1。
如果这个节点不是一个浮点数节点则节点不发生改变。
设置一个文本节点的值。
int mxmlSetText (
mxml_node_t *node,
int whitespace,
const char *string
);
成功返回 0,失败返回 -1。
如果这个节点不是一个文本节点则节点不发生改变。
设置一个文本节点的值为一个格式化的字符串。
int mxmlSetTextf (
mxml_node_t *node,
int whitespace,
const char *format,
...
);
成功返回 0,失败返回 -1。
如果这个节点不是一个文本节点则节点不发生改变。
设置在保存XML数据时的自动折行位置。
void mxmlSetWrapMargin (
int column
);
当"column" is <= 0时取消自动折行。
遍历到XML树中的下一个逻辑节点。
mxml_node_t *mxmlWalkNext (
mxml_node_t *node,
mxml_node_t *top,
int descend
);
下一个节点或者NULL
"descend"参数控制下一个节点是否考虑第一个子节点。"top"参数约束了遍历这个节点的所有子节点。
遍历到XML树中的上一个逻辑节点。
mxml_node_t *mxmlWalkPrev (
mxml_node_t *node,
mxml_node_t *top,
int descend
);
上一个节点或者NULL
"descend"参数控制下一个节点是否考虑第一个子节点。"top"参数约束了遍历这个节点的所有子节点。
XML元素节点的属性值。
typedef struct mxml_attr_s mxml_attr_t;
自定义数据销毁回调函数原型
typedef void (*mxml_custom_destroy_cb_t)(void *);
自定义数据加载回调函数原型
typedef int (*mxml_custom_load_cb_t)( mxml_node_t *, const char *);
自定义数据保存回调函数原型
typedef char *(*mxml_custom_save_cb_t)( mxml_node_t *);
自定义XML类型值
typedef struct mxml_custom_s mxml_custom_t;
XML元素值
typedef struct mxml_element_s mxml_element_t;
错误回调函数原型
typedef void (*mxml_error_cb_t)(const char *);
XML节点索引
typedef struct mxml_index_s mxml_index_t;
加载回调函数
typedef mxml_type_t (*mxml_load_cb_t)( mxml_node_t *);
XML节点
typedef struct mxml_node_s mxml_node_t;
保存回调函数
typedef const char *(*mxml_save_cb_t)( mxml_node_t *, int);
SAX 回调函数
typedef void (*mxml_sax_cb_t)( mxml_node_t *, mxml_sax_event_t, void *);
SAX 事件类型.
typedef enum mxml_sax_event_e mxml_sax_event_t;
XML文本节点值
typedef struct mxml_text_s mxml_text_t;
XML节点值
typedef union mxml_value_u mxml_value_t;
XML元素的属性值
struct mxml_attr_s {
char *name;
char *value;
};
自定义XML节点值
struct mxml_custom_s {
void *data;
mxml_custom_destroy_cb_t destroy;
};
XML元素值
struct mxml_element_s {
mxml_attr_t *attrs;
char *name;
int num_attrs;
};
XML节点索引
struct mxml_index_s {
int alloc_nodes;
char *attr;
int cur_node;
mxml_node_t **nodes;
int num_nodes;
};
XML 节点。
struct mxml_node_s {
struct mxml_node_s *child;
struct mxml_node_s *last_child;
struct mxml_node_s *next;
struct mxml_node_s *parent;
struct mxml_node_s *prev;
int ref_count;
mxml_type_t type;
void *user_data;
mxml_value_t value;
};
XML文本节点值
struct mxml_text_s {
char *string;
int whitespace;
};
XML节点值。
union mxml_value_u {
mxml_custom_t custom;
mxml_element_t element;
int integer;
char *opaque;
double real;
mxml_text_t text;
};
SAX 事件类型。
XML 节点类型