C语言 利用Mini-XML库解析xml文件

@[TOC]C语言解析设备描述文件



一、Mini-XML是什么?

Mini-XML 是一个小型 XML 库,您可以在应用程序中用于读取和编写 XML 和类似 XML 的数据文件,而无需大型非标准库。迷你 XML 只需要 ANSI C 兼容编译器(GCC 工作,大多数供应商的 ANSI C 编译器)和程序也是如此。

下载地址:link.

二、使用步骤

1.打开文件

代码如下(示例):

mxml_node_t* xmlopen(char* xmlname)
{
	FILE *fp = NULL;
	mxml_node_t *tree = NULL;
    fp = fopen(xmlname, "r");
	if(fp != NULL)
	{
		//在该模式下可以读取描述字段中的空格
		tree = mxmlLoadFile(NULL,fp,MXML_OPAQUE_CALLBACK);
	}else
	{
		printf("file %s open failed!\n",xmlname);
	}
    fclose(fp);
	return tree;
}

2.读入数据

示例XML文件

<note year="55" date="33" month="22">
	<id>5000</id>
	<password>FE-D0-18-00</password>
	<name>FE-D0-18-00</name>
	<unikey type="int">
		<word type="real">
			<elem>1</elem>
			<element>255</element>
			<mark>111</mark>
		</word>
	</unikey>
</note>

代码如下:

mxml_node_t* xmlanalize(mxml_node_t* xmlfile)
{
	mxml_node_t *node;
	node = mxmlFindElement(xmlfile, xmlfile, "note",NULL, NULL,MXML_DESCEND);
	printf(" year:%s \n",mxmlElementGetAttr(node,"year"));
    printf(" date:%s \n",mxmlElementGetAttr(node,"date"));
    printf(" month:%s \n",mxmlElementGetAttr(node,"month"));
	return node;
}

读取结果

在这里插入图片描述

int xmlanalize1( mxml_node_t*  node,mxml_node_t*top)
{
	mxml_node_t* id;
	mxml_node_t* password;
	id = mxmlFindElement(node, top, "id",NULL, NULL,MXML_DESCEND);
    printf("[%s}\n",id->child->value.opaque);
	password = mxmlFindElement(node, top, "password",NULL, NULL,MXML_DESCEND);
    printf("[%s]\n",password->child->value.opaque);
	return 0;
}

读取结果
在这里插入图片描述

int xmlanalize2(mxml_node_t* node,mxml_node_t*top)
{
	mxml_node_t* unikey = NULL;
	mxml_node_t* word = NULL;
	mxml_node_t* elem = NULL;
	mxml_node_t* element = NULL;
	mxml_node_t* mark = NULL;
	
	unikey  = mxmlFindElement(node, top, "unikey",NULL, NULL,MXML_DESCEND);
	printf(" type:%s \n",mxmlElementGetAttr(unikey,"type"));
	word  = mxmlFindElement(unikey, node, "word",NULL, NULL,MXML_DESCEND);
	printf(" type:%s \n",mxmlElementGetAttr(word,"type"));
	elem = mxmlFindElement(word, unikey, "elem",NULL, NULL,MXML_DESCEND);
    printf("[%s]\n",elem->child->value.opaque);
	element = mxmlFindElement(word, unikey, "element",NULL, NULL,MXML_DESCEND);
    printf("[%s]\n",element->child->value.opaque);
	mark = mxmlFindElement(word, unikey, "mark",NULL, NULL,MXML_DESCEND);
    printf("[%s]\n",mark->child->value.opaque);
	return 0;
}

读取结果

在这里插入图片描述


总结

本文简单介绍了如何打开xml类型文件及如何从里面提取自己需要的有效信息。
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值