最近在研究mini-xml,使用C语言 和 mini-xml 去生成和解析xml。
但是生成的xml可以有中文,解析却解析不了中文,不知道该怎么解决!
例如从文件读取已经写好的xml文件,想去初始化根时,初始化失败,就因为是有中文在里面,如果没有中文就可以初始化成功!
void parse_XML() {
FILE *fp;
errno_t err = fopen_s(&fp, FILE_NAME, "r"); // 只读方式打开文件
if (err != 0) {
printf("文件打开失败!\n");
return;
}
char strXML[1024] = { 0 };
// 读取文件中的内容
int size = fread(strXML, sizeof(char), sizeof(strXML) / sizeof(strXML[0]), fp);
if (size == 0) {
printf("读取文件内容失败!\n");
return;
}
fclose(fp);
// 载入一个xml字符串到一个XML节点树(返回值:第一个节点或者NULL代表字符串中有错误)
mxml_node_t *xml = mxmlLoadString(NULL, strXML, MXML_OPAQUE_CALLBACK); /*************就在这里初始化返回NULL********************/
if (xml == NULL) {
printf("xml字符串错误!\n");
return;
}
//mxml_node_t *xml = mxmlLoadFile(NULL, fp, MXML_OPAQUE_CALLBACK);
//if (xml == NULL) {
// printf("xml字符串错误!\n");
// return;
//}
// 将xml转换为字符串
char *string = mxmlSaveAllocString(xml, MXML_NO_CALLBACK);
printf("%s\n", string);
free(string);
// 找到<Book>子节点
mxml_node_t *Book = mxmlFindElement(xml, NULL, NULL, NULL, "Book", MXML_DESCEND);
if (Book == NULL) {
printf("没有找到Book子节点!\n");
return;
}
printf("Book = %s\n", mxmlGetElement(Book));
}
读取的xml: