いろんなところで使われている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