- 締切済み
C言語にてXMLファイルから任意部分抽出
C言語にてXMLファイルからタブで囲まれた任意部分の文字列だけを抽出したいのですが、どうやればいいでしょうか? サンプルなどありましたらありがたいです。 <aaa> <bbb>123/bbb> <ccc>あああ</ccc> <bbb>456</bbb> <ccc>いいい</ccc> </aaa> ・抽出したいのは、<bbb></bbb>と<ccc></ccc>で囲まれた文字列。 ・大量データの場合もあるので抽出性能は考慮したい。(基本はメモリ上で操作したい。)
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
<bbb>とか<ccc>とかが<bbb>こんなふうに<ccc>ネストしてたりすると</ccc>どうしようかと</bbb>わりと悩ましかったり</ccc>するかもしれない</bbb> と遊んでみる. とりあえず... メモリマップトファイル (memory mapped file)?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
#3: > while( NULL != fgets( cBuf, 128, fp ) ){ > nn = CyuuSyutsu( "<bbb>", "</bbb>", cBuf ); <bbb>途中の改行を考慮しなくていいなら これで十分ですわね。</bbb>
- yama5140
- ベストアンサー率54% (136/250)
>・抽出したいのは、<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)
Cならlibxml2でXPath使うとか。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
Cであることは譲れない条件ですか? C++ならApache Xercesあたりを使うのが定番ですが。