mxml的使用
1.
XML的介绍:
XML是由互联网联盟(World Wide Web Consortium,W3C)的XML工作组定义的。 “扩展标记语言(XML)是SGML的子集,其目标是允许普通的SGML在Web上以目前HTML的方式被服务、接收和处理。XML被设计成易于实现,且可在SGML和HTML之间互相操作。” HTML的出现极大地推动了世界范围内的互联网的发展,万维网就是一个主要成果。然而,HTML在某些方面是一种通用编码的倒退。 第一,HTML为了获得精简编码方式的有效性,而抛弃了通用编码的一些基本原则。例如,通用编码要求一个文档类型能用于任何目的,要求用户编码时应重载标签而不是重新定义特殊目的的标签。
XML特点和作用 :
XML 指可扩展标识语言( eXtensible Markup Language)
XML 的设计宗旨是传输数据, 而非显示数据
XML 标签没有被预定义。 您需要自行定义标签。
作为一种通用的数据存储和通信格式被广泛应用。
描述的数据作为一棵树型的结构而存在。
规则说明:它定义 XML 的版本(1.0)和所使用的编码 UTF-8,version不可省略,encoding可以省略;
描述文档的根元素,有且只有一个根元素。
所有 XML 元素都须有关闭标签
XML标签对大小写敏感。
XML元素 :
XML元素指的是开始标签直到结束标签的部分,可以包含文本、属性、其他元素 中的一种或者多种。 比如下面这个xml文件
<books>
<book id="001">
<author>wangerauthor>
book>
books>
2.命名规则
- 名称中可以包含字母、数字或者其他的字符;
- 名称不能以数字或者标点符号开始;
- 名称中不能包含空格。
3.属性
属性值用双引号包裹;一个元素可以有多个属性,它的基本格式为:
<元素名 属性名=“属性值” 属性名=“属性值”>;
属性值中不能够直接包含<.”,&。
比如:
John
4.函数使用
minixml常用函数接口:
均需要包含头文件 #include
#include"mxml.h"
int main()
{
mxml_node_t *xml = mxmlNewXML("1.0");
mxml_node_t *books = mxmlNewElement(xml,"books");
mxml_node_t *book = mxmlNewElement(books,"book");
mxmlElementSetAttr(book,"id","001");
mxml_node_t *author = mxmlNewElement(book,"author");
mxmlNewText(author,0,"wanger");
FILE* fp = fopen("book.xml","wb");
mxmlSaveFile(xml,fp,MXML_NO_CALLBACK);
fclose(fp);
mxmlDelete(xml);
return 0;
}
我们生成了book.xml文件:cat book.xml
<books><book id="001"><author>wangerauthor>book>books>
我们利用在线代码格式化工具来检查一下:
<books>
<book id="001">
<author>wangerauthor>
book>
books>
创建就这么简单,那么接下来,我们要解析xml文件:
步骤:
- 打开一个xml文件
- 把文件加载到内存中,mxml_node_t mxmlLoadFile(mxml_node_t *top, FILE *fp,mxml_type_t (*cb)(mxml_node_t ));
- 查找待提取的节点标签:mxml_node_t *mxmlFindElement(mxml_node_t *node, mxml_node_t *top,const char *name, const char *attr,const char *value, int descend);
- 获取标签属性:const char *mxmlElementGetAttr(mxml_node_t *node, const char *name);
- 获取标签的文本内容: const char *mxmlGetText(mxml_node_t *node, int *whitespace);
- 释放节点,关闭文件
解析的文本:
<books>
<book id="001">
<author>wangerauthor>
book>
books>
代码:
#include"mxml.h"
#include<stdio.h>
int main()
{
FILE* fp = fopen("book.xml","r");
mxml_node_t* xml = mxmlLoadFile(NULL,fp,MXML_NO_CALLBACK);
mxml_node_t* book = NULL;
mxml_node_t* author = NULL;
book = mxmlFindElement(xml,xml,"book","id",NULL,MXML_DESCEND);
author = mxmlFindElement(book,xml,"author",NULL,NULL,MXML_DESCEND);
if(author == NULL)
{
printf("author error
");
}
else
{
printf("book id is:%s
",mxmlElementGetAttr(book,"id"));
printf("author is:%s
",mxmlGetText(author,NULL));
book = mxmlFindElement(xml,xml,"book","id",NULL,MXML_DESCEND);
}
mxmlDelete(xml);
fclose(fp);
return 0;
}
结果:
book id is:001
author is:wanger
这个是不错的博客,最后还有一部分实践,可以参考:
https://www.cnblogs.com/liunianshiwei/p/6086577.html