/** * @file myXml.h * @brief XML 解析库 — 纯 C 接口封装 tinyxml2 * @details 提供不透明句柄的 C 风格 XML DOM 操作。 * 内部 C++ tinyxml2 实现,外部纯 C 兼容。 */ #ifndef _MY_XML_H_ #define _MY_XML_H_ #include #ifdef __cplusplus extern "C" { #endif /* 不透明句柄 */ typedef void *myXmlDoc_t; typedef void *myXmlElem_t; /* ========== 文档生命周期 ========== */ /** 从文件加载 XML 文档,失败返回 NULL */ myXmlDoc_t myXml_load_file(const char *path); /** 新建空 XML 文档(含 XML 声明) */ myXmlDoc_t myXml_new_doc(const char *root_name); /** 释放文档 */ void myXml_free_doc(myXmlDoc_t doc); /** 获取根元素 */ myXmlElem_t myXml_root_elem(myXmlDoc_t doc); /** 保存文档到文件 */ int myXml_save_file(myXmlDoc_t doc, const char *path); /* ========== 元素查询 ========== */ /** 查找第一个匹配名称的子元素 */ myXmlElem_t myXml_first_child(myXmlElem_t parent, const char *name); /** 查找下一个匹配名称的兄弟元素 */ myXmlElem_t myXml_next_sibling(myXmlElem_t elem, const char *name); /** 获取字符串属性,不存在返回默认值 */ const char *myXml_attr_str(myXmlElem_t elem, const char *name, const char *def_val); /** 获取 float 属性,不存在返回默认值 */ float myXml_attr_float(myXmlElem_t elem, const char *name, float def_val); /** 获取 int 属性,不存在返回默认值 */ int myXml_attr_int(myXmlElem_t elem, const char *name, int def_val); /* ========== 元素创建 ========== */ /** 为父节点创建子元素 */ myXmlElem_t myXml_new_child(myXmlElem_t parent, const char *name); /** 设置字符串属性 */ void myXml_set_attr(myXmlElem_t elem, const char *name, const char *value); /** 设置 int 属性 */ void myXml_set_attr_int(myXmlElem_t elem, const char *name, int value); /** 设置 float 属性 */ void myXml_set_attr_float(myXmlElem_t elem, const char *name, float value); #ifdef __cplusplus } #endif #endif