gpt4 book ai didi

c - 基本 XML 解析器

转载 作者:行者123 更新时间:2023-11-30 15:33:27 25 4
gpt4 key购买 nike

我正在尝试用 C 语言编写一个基本的 XML 解析器,而不使用任何非标准库,它将能够:

  • 检测多个不同的标签
  • 检测到空标签
  • 检测标签不匹配

我遇到的主要问题是如何区分哪个是哪个:标签的开头、内容和标签的结尾。

我的想法是在读取文件时实现一个有限状态机,以便知道我正在读取什么。

请告诉我你的想法,如果我指出了错误的方向,请纠正我。

编辑:添加了一段检测元素和内容的代码

char tmp, buff = -1;
char *content = (char*) malloc(sizeof(char) * (size + 1));
int stage = -1;
int i = 0;
while((tmp = fgetc(file)) != EOF) {
if(tmp == '<') {
if(stage == 2 && buff != '>'){
printf("content: ");
printCont(content,i);
}
stage = 1;
buff = tmp;
i = 0;
continue;
}else if(tmp == '/' && buff == '<') {
stage = 3;
buff = tmp;
i = 0;
continue;
} else if(tmp == '>') {
if (stage == 1) {
printf("tag_start: ");
} else if (stage == 3) {
printf("tag_end: ");
} else if (stage == 2) {
printf("content: ");
}
buff = tmp;
printCont(content,i);//reads the contnet
stage = 2;
i = 0;
continue;
}
if(tmp != ' ' && tmp != '\n' && tmp != '\t') {//simple filter
content[i] = tmp;
buff = tmp;
i++;
}
}

如果您能对上面的代码发表评论并告诉我如何改进它,我将非常感激。到目前为止,它检测到了标签和内容,这正是我首先真正需要的。

最佳答案

仅 FSM 是不够的。您将需要一个将文本分解为 XML spec 指定的标记。 ,但是您需要使用其他技术来实际识别有效的 XML(或拒绝无效的 XML)。

然后您需要编写一个基本的 recursive descent parser它将获取这些标记并使用它们来识别有效的 XML。

这听起来像是一个足够基本的作业,您不必担心 XML 规范中 80% 的内容,但请确保您理解开始标记和结束标记。即便如此,这也将是一项不小的工作量。

关于c - 基本 XML 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23702088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com