一、XML
1. minixml官网地址
http://www.msweet.org/projects.php/Mini-XML
其他解析xml开源库:tinyxml pugixml
1)包含头文件: mxml.h
2)编译的时候需要添加动态库: libmxml.so
- -lmxml
- /usr/local/lib
2. minixml安装:
- ./configure --enable-threads=no && make
- sudo make install
3. 新目录需要一个文件头 - 标准
<?xml version="1.0" encoding="utf-8"?>
- version不可以省略
- encoding可以省略
4. 使用注意事项
- 必须有一个根元素(节点) -- (只有一个)
- xml标签对大小写敏感
- 标签大多成对使用, 有开始, 有结束
<date></date> <time></time>
5. 标签中可以添加属性
<node date="17/11/2017"> 属性值必须加引号
6. 标签注释
<!-- 这是注释 -->
7. 开源库minixml的使用
(1)跟标签的对应的节点,父亲节点是:文件头节点
(2)生成xml文件
1)创建一个新的xml文件
mxml_node_t *mxmlNewXML(const char *version);
- 返回新创建的xml文件节点.
- 默认的文件的编码为utf8
2)删除节点的内存
void mxmlDelete(mxml_node_t *node);
3)添加一个新的节点
mxml_node_t *mxmlNewElement( mxml_node_t *parent, // 父节点 const char *name // 新节点标签名 );
4)设置节点的属性名和属性值
void mxmlElementSetAttr( mxml_node_t *node, // 被设置属性的节点 const char *name, // 节点的属性名 const char *value // 属性值 );
5)创建节点的文本内容
mxml_node_t *mxmlNewText ( mxml_node_t *parent, // 节点地址 int whitespace, // 是否有空白 0 const char *string // 文本内容 );
6)保存节点到xml文件
int mxmlSaveFile( mxml_node_t *node, // 根节点 FILE *fp, // 文件指针 mxml_save_cb_t cb // 默认MXML_NO_CALLBACK );
(3)解析xml文件
1)从文件加载xml到内存
mxml_node_t *mxmlLoadFile( mxml_node_t *top, // 一般为NULL FILE *fp, // 文件指针 mxml_type_t (*cb)(mxml_node_t *) // 默认 MXML_NO_CALLBACK );
2)获取节点的属性
const char *mxmlElementGetAttr( mxml_node_t *node, // 带属性的节点的地址 const char *name // 属性名 );
3)获取指定节点的文本内容
const char *mxmlGetText( mxml_node_t *node, // 节点的地址 int *whitespace // 是否有空格 );
4)跳转到下一个节点
mxml_node_t *mxmlWalkNext( mxml_node_t *node, // 当前节点 mxml_node_t *top, // 根节点 int descend ); descend:搜索的规则 MXML_NO_DESCEND:查看同层级 MXML_DESCEND_FIRST:查看下一层级的第一个 MXML_DESCEND:一直向下搜索
5)查找节点
mxml_node_t *mxmlFindElement( mxml_node_t *node, // 当前节点 mxml_node_t *top, // 根节点 const char *name, // 查找的标签名 const char *attr, // 查找的标签的属性,没有属性传NULL const char *value, // 查找的标签的属性值,没有属性传NULL int descend // 同上 );
8. 示例
(1)生成下面的xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <bookstore> 3 <book category="儿童"> 4 <title>哈利波特</title> 5 <autoro>JK.Rowling</autoro> 6 <year>2005</year> 7 <price>29.99</price> 8 </book> 9 </bookstore>