xmlNewTextReaderFilename

いろんなところで使われているlibxmlについて扱う。

The XML C parser and toolkit of Gnome

なぜlibxml"2"なのか・・・。

http://www.fifi.org/doc/libxml1/README

まあ、現在はlibxml2となっているのでしょうがない・・・。

Module xmlreader from libxml2

今回は、xmlNewTextReaderFilenameでXMLファイルを読み込んでリーダを生成する。
まずはインストール。

$ sudo yum install libxml2-devel
[sudo] bg1 のパスワード:
メタデータの期限切れの最終確認: 0:07:13 時間前の xxxx年xx月xx日 xx時xx分xx秒 に実施しました。
依存関係が解決しました。
================================================================================
 パッケージ             アーキテクチャー
                                      バージョン           リポジトリ     サイズ
================================================================================
インストール:
 libxml2-devel          x86_64        2.9.8-5.fc29         updates        1.0 M
アップグレード:
 libxml2                x86_64        2.9.8-5.fc29         updates        647 k
 python3-libxml2        x86_64        2.9.8-5.fc29         updates        223 k
依存関係をインストール中:
 xz-devel               x86_64        5.2.4-3.fc29         fedora          56 k

トランザクションの概要
================================================================================
インストール    2 パッケージ
アップグレード  2 パッケージ

ダウンロードサイズの合計: 1.9 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード中です:
(1/4): xz-devel-5.2.4-3.fc29.x86_64.rpm          25 kB/s |  56 kB     00:02
(2/4): libxml2-2.9.8-5.fc29.x86_64.rpm          279 kB/s | 647 kB     00:02
(3/4): libxml2-devel-2.9.8-5.fc29.x86_64.rpm    363 kB/s | 1.0 MB     00:02
(4/4): python3-libxml2-2.9.8-5.fc29.x86_64.rpm  315 kB/s | 223 kB     00:00
--------------------------------------------------------------------------------
合計                                            343 kB/s | 1.9 MB     00:05
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
Upgrade: libxml2-2.9.8-5.fc29.x86_64
  アップグレード中 : libxml2-2.9.8-5.fc29.x86_64                            1/6
Upgrade: libxml2-2.9.8-5.fc29.x86_64
Installed: xz-devel-5.2.4-3.fc29.x86_64
  インストール中   : xz-devel-5.2.4-3.fc29.x86_64                           2/6
Installed: xz-devel-5.2.4-3.fc29.x86_64
Installed: libxml2-devel-2.9.8-5.fc29.x86_64
  インストール中   : libxml2-devel-2.9.8-5.fc29.x86_64                      3/6
Installed: libxml2-devel-2.9.8-5.fc29.x86_64
Upgrade: python3-libxml2-2.9.8-5.fc29.x86_64
  アップグレード中 : python3-libxml2-2.9.8-5.fc29.x86_64                    4/6
Upgrade: python3-libxml2-2.9.8-5.fc29.x86_64
Upgraded: python3-libxml2-2.9.8-4.fc29.x86_64
  整理             : python3-libxml2-2.9.8-4.fc29.x86_64                    5/6
Upgraded: python3-libxml2-2.9.8-4.fc29.x86_64
Upgraded: libxml2-2.9.8-4.fc29.x86_64
  整理             : libxml2-2.9.8-4.fc29.x86_64                            6/6
Upgraded: libxml2-2.9.8-4.fc29.x86_64
  scriptletの実行中: libxml2-2.9.8-4.fc29.x86_64                            6/6
  検証             : libxml2-devel-2.9.8-5.fc29.x86_64                      1/6
  検証             : xz-devel-5.2.4-3.fc29.x86_64                           2/6
  検証             : libxml2-2.9.8-5.fc29.x86_64                            3/6
  検証             : libxml2-2.9.8-4.fc29.x86_64                            4/6
  検証             : python3-libxml2-2.9.8-5.fc29.x86_64                    5/6
  検証             : python3-libxml2-2.9.8-4.fc29.x86_64                    6/6

アップグレード済み:
  libxml2-2.9.8-5.fc29.x86_64        python3-libxml2-2.9.8-5.fc29.x86_64

インストール済み:
  libxml2-devel-2.9.8-5.fc29.x86_64         xz-devel-5.2.4-3.fc29.x86_64

完了しました!
$

test.xmlを作成する。

<?xml version="1.0" encoding="UTF-8"?>
<top>
  <listitem>
    <itemname>
      First
    </itemname>
    <itemnumber>
      10
    </itemnumber>
  </listitem>
  <listitem>
    <itemname>
      Second
    </itemname>
    <itemnumber>
      20
    </itemnumber>
  </listitem>
</top>

こんな感じ・・・。

main.cで、

読み込めたらポインタが返ってくるのでそれを出力。

$ ls
main  main.c  test.xml
$ cat test.xml
<?xml version="1.0" encoding="UTF-8"?>
<top>
  <listitem>
    <itemname>
      First
    </itemname>
    <itemnumber>
      10
    </itemnumber>
  </listitem>
  <listitem>
    <itemname>
      Second
    </itemname>
    <itemnumber>
      20
    </itemnumber>
  </listitem>
</top>
$ gcc main.c -o main -I/usr/include/libxml2 -lxml2
$ ./main
reader = 0x00cac980
$

読み込みは出来たみたい。

Sample/libxml/xmlNewTextReaderFilename/xmlNewTextReaderFilename/src/xmlNewTextReaderFilename at master · bg1bgst333/Sample · GitHub