2011-06-20 10 views
0

私はxmlファイルを読んで解析して1つの値を見つけなければなりません。文字列関数を使用してC言語のxmlを解析する

次のように私は、ファイル内の2箇所でタグ内に言及し、この値を持っている:

<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); 
     } 
+3

は、以前の質問のいくつかに答えを選択する自由を感じます。それは、このサイトがどのように機能するかです。 –

+1

"サイズの制限により、私はcan not xml Parsers"を使用します..なぜこれらの制限はありますか?単にTinyXMLのような小さなものを使うことはできませんか? – Bart

+0

ええ、私はあなたがパーサーを使用する必要があると思います –

答えて

2

私はあなたの構文解析を行うために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 
    } 
} 
+0

コードをありがとう。私はそれを動作させるためにいくつかの場所を変更しました。 strchrではなくchar * endにstrtokを使用しました。また、strchrは "文字"を "<"から "<"に変更する必要があります。 – user489152

関連する問題