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 version="1.0" encoding="utf-8"?>
规则说明:它定义 XML 的版本(1.0)和所使用的编码 UTF-8,version不可省略,encoding可以省略;
描述文档的根元素,有且只有一个根元素。
所有 XML 元素都须有关闭标签
XML标签对大小写敏感。
XML元素 :
XML元素指的是开始标签直到结束标签的部分,可以包含文本、属性、其他元素 中的一种或者多种。 比如下面这个xml文件
<?xml version="1.0" encoding="utf-8"?>
<books>
<book id="001">
<author>wanger</author>
</book>
</books>
2.命名规则
名称中可以包含字母、数字或者其他的字符;
名称不能以数字或者标点符号开始;
名称中不能包含空格。
3.属性
属性值用双引号包裹;一个元素可以有多个属性,它的基本格式为:
<元素名 属性名=“属性值” 属性名=“属性值”>;
属性值中不能够直接包含<.”,&。
比如:
<Name>John</Name>
4.函数使用
minixml常用函数接口:
均需要包含头文件 #include
#include"mxml.h"
int main()
{
// create a new xml
mxml_node_t *xml = mxmlNewXML("1.0");
//add a node name books
mxml_node_t *books = mxmlNewElement(xml,"books");
//add a node under books name book
mxml_node_t *book = mxmlNewElement(books,"book");
//set attr
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
<?xml version="1.0" encoding="utf-8"?><books><book id="001"><author>wanger</author></book></books>
我们利用在线代码格式化工具来检查一下:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book id="001">
<author>wanger</author>
</book>
</books>
创建就这么简单,那么接下来,我们要解析xml文件:
步骤:
解析的文本:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book id="001">
<author>wanger</author>
</book>
</books>
代码:
#include"mxml.h"
#include<stdio.h>
int main()
{
FILE* fp = fopen("book.xml","r");
// jiazai xml
mxml_node_t* xml = mxmlLoadFile(NULL,fp,MXML_NO_CALLBACK);
mxml_node_t* book = NULL;
mxml_node_t* author = NULL;
// find note
book = mxmlFindElement(xml,xml,"book","id",NULL,MXML_DESCEND);
//get attr
author = mxmlFindElement(book,xml,"author",NULL,NULL,MXML_DESCEND);
if(author == NULL)
{
printf("author error\n");
}
else
{
printf("book id is:%s\n",mxmlElementGetAttr(book,"id"));
printf("author is:%s\n",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
这个是不错的博客,最后还有一部分实践,可以参考: