【问题标题】:Parse an xml in C using string functions使用字符串函数在 C 中解析 xml
【发布时间】:2011-06-20 13:04:12
【问题描述】:

我有一个 xml 文件,我必须读取并解析它以找出一个值。

我在文件的两个位置的标签中提到了这个值,如下所示:

<length>xx</length>

<length type = "float">yy</length>

我需要提取 xx 和 yy。我正在使用简单的字符串函数(由于大小限制,我不能使用 xml 解析器)。

哪些字符串函数可以帮助我提取 xx 和 yy?

我在这些行上尝试了 strtok() 但没有成功..:

fp = fopen( "trial.xml", "r" );
    if(fp == NULL){
        perror("file missing");
    }


    while (fgets (buffer, sizeof (buffer), fp) != NULL) {
                char *p;
            p = strstr(buffer, "<length");
            if(p != NULL){
            printf("p = %s\n", p);
            p = strtok (p, "<>");
            printf("strtok 1, p = %s\n", p);
            p = strtok (NULL, "<>");
            printf("p = %s\n", p);
         }

【问题讨论】:

  • 请随意选择您之前的一些问题的答案。这就是本网站的运作方式。
  • “由于大小限制,我不能使用 xml 解析器”.. 为什么有这些限制?你不能简单地使用像 TinyXML 这样小的东西吗?
  • 是的,我认为你应该使用解析器
  • 好的,让我看看 TinyXML :) 还有其他建议吗?
  • 任何最小的 C 库(xml 解析器?)?

标签: c string substring


【解决方案1】:

我建议使用 TinyXML 进行解析。

如果你想使用蛮力...

fp = fopen( "trial.xml", "r" );
if(!fp) {
    perror("file missing");
}

while(fgets (buffer, sizeof (buffer), fp)) {
    if(strstr(buffer, "<length>")) {
        char* start = strchr(buffer, '>');
        start++;
        char* end = strchr(buffer, '<');
        end = '\0';
        printf("%s\n", start);      // prints xx
    }
    if(strstr(buffer, "<length type = \"float\">")) {
        char* start = strchr(buffer, '>');
        start++;
        char* end = strchr(buffer, '<');
        end = '\0';
        printf("%s\n", start);      // prints yy
    }
}

【讨论】:

  • 感谢您的代码。我改变了几个地方让它工作。将 strtok 用于 char*e​​nd 而不是 strchr。 strchr 还需要“一个字符”,因此将“
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 2016-05-15
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
相关资源
最近更新 更多