@[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;
}
读取结果