以下参考于:XML 简介
什么是XML
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
- XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
XML和HTML区别
XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
- XML 被设计用来传输和存储数据,其焦点是数据的内容。
- HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
图片代码来源于视频教程
china.xml
<?xml version="1.0" encoding="utf-8"?>
<China>
<City>
<Name isbig="true">北京</Name>
<Area>1.641万平方千米</Area>
<Population>2200万</Population>
</City>
<City>
<Name isbig="false">石家庄</Name>
<Area>15848平方千米</Area>
<Population>107万</Population>
</City>
</China>
create_xml.c
#include <stdio.h>
#include <mxml.h>
int main(int argc, const char* argv[])
{
// 创建xml文件头节点
mxml_node_t *xml = mxmlNewXML("1.0");
// 创建xml根节点 - china
mxml_node_t* china = mxmlNewElement(xml, "China");
// 创建城市节点
mxml_node_t* city = mxmlNewElement(china, "City");
// 添加子节点
// name
mxml_node_t* name = mxmlNewElement(city, "Name");
// 设置标签值
mxmlNewText(name, 0, "北京");
mxmlElementSetAttr(name, "isbig", "true");
// 面积
mxml_node_t* area = mxmlNewElement(city, "Area");
mxmlNewText(area, 0, "1.641万平方千米");
// 人口
mxml_node_t* popu = mxmlNewElement(city, "Population");
mxmlNewText(popu, 0, "2200万");
// 第二个城市节点
city = mxmlNewElement(china, "City");
// name
name = mxmlNewElement(city, "Name");
mxmlNewText(name, 0, "石家庄");
mxmlElementSetAttr(name, "isbig", "false");
area = mxmlNewElement(city, "Area");
mxmlNewText(area, 0, "15848平方千米");
popu = mxmlNewElement(city, "Population");
mxmlNewText(popu, 0, "107万");
// 将xml内容保存到磁盘
FILE* fp = fopen("china.xml", "w");
mxmlSaveFile(xml, fp, MXML_NO_CALLBACK);
fclose(fp);
mxmlDelete(xml);
return 0;
}
parse_xml.c
#include <stdio.h>
#include <mxml.h>
int main(int argc, const char* argv[])
{
// 从磁盘加载xml文件
FILE* fp = fopen("china.xml", "r");
if(fp == NULL)
{
printf("fopen error\n");
return 0;
}
// root 节点指向xml文件头
mxml_node_t* root = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK);
// 遍历 - 取出各个节点的值
// 找到第一个城市节点
mxml_node_t* city = mxmlFindElement(root, root, "City", NULL, NULL, MXML_DESCEND);
if(city == NULL)
{
printf("xml node not found\n");
return 0;
}
while( city )
{
printf("==================\n");
// 向下走一个节点
mxml_node_t* node = mxmlWalkNext(city, root, MXML_DESCEND_FIRST);
printf("city: \n");
printf(" name = %s\n", mxmlGetText(node, NULL));
//
node = mxmlWalkNext(node, root, MXML_NO_DESCEND);
printf(" area = %s\n", mxmlGetText(node, NULL));
//
node = mxmlWalkNext(node, root, MXML_NO_DESCEND);
printf(" population = %s\n", mxmlGetText(node, NULL));
// 搜索下一个城市节点
city = mxmlFindElement(city, root, "City", NULL, NULL, MXML_DESCEND);
}
fclose(fp);
mxmlDelete(root);
return 0;
}