- ベストアンサー
【緊急】xmlからデータの取得についての質問です。
- 自然言語処理について勉強しています。
- Wikipediaのdumpデータからタイトルと本文を抜き出して処理をしようと思ってます。
- xmlの処理について試しているのですが、エラーに見舞われて困っています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
明らかに間違っている部分を指摘しておきます。 > pb[0] = p;//タイトルの始点 pb[0]の型はcharなので、charに収まらない長さのファイルの場合始点の位置がおかしくなります。 jawiki-20211220-pages-articles-multistream1.xmlの長さはcharでは表せないはずです。 タイトルの終点(pb[3])やタイトルのバイト数(pb[2])も同様です。 >fgets(line,pb[2],pb[0]);//タイトルを取得 fgets()の第3引数の型はFILE*ですが、pb[0]の型はcharであり、この行を実行するとプログラムが異常終了するはずです。 指定した位置からファイルを読ませたければfseek()やfsetpos()を使ってfpの現在位置を変える必要があります。 >else if (strstr(line, "</title>")){ <title>と</title>が同じ行内にあった場合</title>に対するチェックが実行されることはありません。出力されるテキストが空なのは、fprintf(fw,"%s",line)が実行されないからです。 XMLを扱うAPIを標準で持っているPythonとかで書いたほうが簡単だと思います。
その他の回答 (2)
- _kappe_
- ベストアンサー率68% (1600/2328)
回答No.1・2の者です。 C言語で自力でプログラムを書きたい理由は分かりました。ポインタが苦手とは言っていられないようですね。勉強頑張ってください。
お礼
ありがとうございます。
- _kappe_
- ベストアンサー率68% (1600/2328)
XMLを処理するならC言語を使うのはあまりお勧めしません。ポインタの扱いが苦手ならなおさらです。 どうしてもC言語で書きたい場合は、XMLの文法を解析する部分を自力で書くのはやめて、既存のXML解析用ライブラリを使うべきです。例を挙げるとExpat(https://libexpat.github.io/), libxml2(https://gitlab.gnome.org/GNOME/libxml2)などです。ただし、自分で使ったことはないのでメリット・デメリットなどは語れません。
お礼
他の方からの指摘もありましたが、ライブラリを使うと能力が身につかないとのことです。 なので自力でやってます。 ライブラリでやるパターンは既にできています。