• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【緊急】xmlからデータの取得についての質問です。)

【緊急】xmlからデータの取得についての質問です。

このQ&Aのポイント
  • 自然言語処理について勉強しています。
  • Wikipediaのdumpデータからタイトルと本文を抜き出して処理をしようと思ってます。
  • xmlの処理について試しているのですが、エラーに見舞われて困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1600/2328)
回答No.2

明らかに間違っている部分を指摘しておきます。 > 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とかで書いたほうが簡単だと思います。

study_prg
質問者

お礼

他の方からの指摘もありましたが、ライブラリを使うと能力が身につかないとのことです。 なので自力でやってます。 ライブラリでやるパターンは既にできています。

その他の回答 (2)

  • _kappe_
  • ベストアンサー率68% (1600/2328)
回答No.3

回答No.1・2の者です。 C言語で自力でプログラムを書きたい理由は分かりました。ポインタが苦手とは言っていられないようですね。勉強頑張ってください。

study_prg
質問者

お礼

ありがとうございます。

  • _kappe_
  • ベストアンサー率68% (1600/2328)
回答No.1

XMLを処理するならC言語を使うのはあまりお勧めしません。ポインタの扱いが苦手ならなおさらです。 どうしてもC言語で書きたい場合は、XMLの文法を解析する部分を自力で書くのはやめて、既存のXML解析用ライブラリを使うべきです。例を挙げるとExpat(https://libexpat.github.io/), libxml2(https://gitlab.gnome.org/GNOME/libxml2)などです。ただし、自分で使ったことはないのでメリット・デメリットなどは語れません。