mxml的使用

版权声明:本文为博主原创文章,转载请备注https://blog.csdn.net/travelerwz。 https://blog.csdn.net/Travelerwz/article/details/82730336

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 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文件
  • 把文件加载到内存中,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);
  • 释放节点,关闭文件

解析的文本:

<?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

这个是不错的博客,最后还有一部分实践,可以参考:

https://www.cnblogs.com/liunianshiwei/p/6086577.html

猜你喜欢

转载自blog.csdn.net/Travelerwz/article/details/82730336