mxml的使用

2019-07-13 05:22发布

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() { // 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 <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"); // 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 "); } 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