• 締切済み

C言語にてXMLファイルから任意部分抽出

C言語にてXMLファイルからタブで囲まれた任意部分の文字列だけを抽出したいのですが、どうやればいいでしょうか? サンプルなどありましたらありがたいです。  <aaa>   <bbb>123/bbb>   <ccc>あああ</ccc>   <bbb>456</bbb>   <ccc>いいい</ccc>  </aaa> ・抽出したいのは、<bbb></bbb>と<ccc></ccc>で囲まれた文字列。 ・大量データの場合もあるので抽出性能は考慮したい。(基本はメモリ上で操作したい。)

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

<bbb>とか<ccc>とかが<bbb>こんなふうに<ccc>ネストしてたりすると</ccc>どうしようかと</bbb>わりと悩ましかったり</ccc>するかもしれない</bbb> と遊んでみる. とりあえず... メモリマップトファイル (memory mapped file)?

回答No.4

#3: > while( NULL != fgets( cBuf, 128, fp ) ){ >   nn = CyuuSyutsu( "<bbb>", "</bbb>", cBuf ); <bbb>途中の改行を考慮しなくていいなら これで十分ですわね。</bbb>

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.3

>・抽出したいのは、<bbb></bbb>と<ccc></ccc>で囲まれた文字列。  これを  ・抽出したいのは、<bbb>と</bbb>または<ccc>と</ccc>で囲まれた文字列、として  例での結果は、   あああ   456   いいい  となる、とした場合のサンプルです。 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。 #include <stdio.h> #include <stdlib.h> #include <string.h> int CyuuSyutsu( char cTop[], char cBtm[], char cBuf[] ) {  char *pT, *pB;  pT = strstr( cBuf, cTop );  pB = strstr( cBuf, cBtm );  if( NULL == pT ) return( 0 );  if( NULL == pB ) return( 0 );  *pB = '\0';  return( pT - cBuf + strlen( cTop ) ); } int main() {  int nn;  char cBuf[ 128 ];  FILE *fp;  fp = fopen( "Z:/test.txt", "r" );  while( NULL != fgets( cBuf, 128, fp ) ){   nn = CyuuSyutsu( "<bbb>", "</bbb>", cBuf );   if( nn ) fprintf( stderr, "%s\n", &cBuf[ nn ] );   nn = CyuuSyutsu( "<ccc>", "</ccc>", cBuf );   if( nn ) fprintf( stderr, "%s\n", &cBuf[ nn ] );  }  fclose( fp );  return( 0 ); }

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

Cならlibxml2でXPath使うとか。

回答No.1

Cであることは譲れない条件ですか? C++ならApache Xercesあたりを使うのが定番ですが。

関連するQ&A

専門家に質問してみよう