📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

36行目: 36行目:


== XPath ==
== XPath ==
==== libxml2ライブラリ ====
===== libxml2ライブラリとは =====
libxml2ライブラリは、XMLの処理に主眼を置いているが、HTMLの解析と操作にも対応している。<br>
HTMLはXMLと比較して構造が緩やかであり、しばしば厳密な文法規則に従っていないため、libxml2ライブラリはHTMLの特性に合わせた機能を提供している。<br>
<br>
libxml2ライブラリは、整形式でないHTMLドキュメントを解析する能力を持っている。<br>
これは、閉じタグの欠落や属性値の引用符の省略等、Webページでよく見られる不完全なマークアップを適切に処理できることを意味する。<br>
libxml2ライブラリは、可能な限りドキュメントの構造を推測して、妥当なDOM (Document Object Model) ツリーを構築する。<br>
<br>
HTMLの解析には、libxml2ライブラリのhtmlParserモジュールが使用される。<br>
このモジュールは、一般的なHTMLの特殊性、例えば大文字小文字を区別しない要素名、空要素の処理、特定の要素に対するデフォルトの属性の追加等を考慮している。<br>
<br>
libxml2ライブラリを使用することにより、HTMLドキュメントの読み込み、要素や属性の追加・変更・削除、DOMツリーの操作が可能である。<br>
また、XPath式を使用してHTML文書内の特定の要素を検索することもできる。<br>
<br>
WebスクレイピングやHTMLコンテンツの自動生成、既存のHTMLドキュメントの修正等のタスクにおいて、libxml2ライブラリは有用なツールとなる。<br>
<u>ただし、モダンなWebアプリケーションで使用される動的なJavaScriptコンテンツの処理には制限があることに注意が必要である。</u><br>
<br>
libxml2ライブラリは、HTMLをXHTML (XML準拠のHTML) に変換する機能も提供している。<br>
これにより、既存のHTMLコンテンツをより厳格なXML処理パイプラインに統合することが可能となる。<br>
<br>
このように、libxml2ライブラリはHTMLの処理においても柔軟性と堅牢性を提供して、Webコンテンツを扱う多くのアプリケーションで重要な役割を果たしている。<br>
<br>
===== libxml2ライブラリのライセンス =====
libxml2ライブラリのライセンスは、MITライセンスに準拠している。<br>
<br>
===== libxml2ライブラリのインストール =====
* パッケージ管理システムからインストール
# RHEL
sudo dnf install libxml2-devel
# SUSE
sudo zypper install libxml2-devel
<br>
* ソースコードからインストール
libxml2ライブラリのビルドに必要なライブラリをインストールする。<br>
# RHEL
sudo dnf install cmake python3-devel \
                  zlib-devel        # zlibライブラリを使用する場合
                  xz-devel          # lzmaライブラリを使用する場合
                  readline-devel    # Readlineライブラリを使用する場合
                  libicu-devel      # ICUライブラリを使用する場合
                  meson ninja-build  # MesonおよびNinjaでビルドする場合
# SUSE
sudo zypper install cmake python3-devel \
                    zlib-devel      # zlibライブラリを使用する場合
                    xz-devel        # lzmaライブラリを使用する場合
                    readline-devel  # Readlineライブラリを使用する場合
                    libicu-devel    # ICUライブラリを使用する場合
                    meson ninja    # MesonおよびNinjaでビルドする場合
<br>
[https://gitlab.gnome.org/GNOME/libxml2 libxml2ライブラリのGithub]、または、[https://github.com/GNOME/libxml2 libxml2ライブラリのGithub]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf libxml2-v<バージョン>.tar.gz
cd libxml2-v<バージョン>
<br>
libxml2ライブラリをビルドおよびインストールする。<br>
mkdir build && cd build
# CMakeを使用する場合
cmake -DCMAKE_BUILD_TYPE=Release  \
      -DCMAKE_INSTALL_PREFIX=<libxml2ライブラリのインストールディレクトリ> \
      -DLIBXML2_WITH_HTTP=ON      \  # HTTPをサポートする場合
      -DLIBXML2_WITH_READLINE=ON  \  # Readlineを使用する場合
      -DLIBXML2_WITH_ICU=ON      \  # ICUライブラリを使用する場合
      -DLIBXML2_WITH_ZLIB=ON      \  # zlibライブラリを使用する場合
      -DLIBXML2_WITH_LZMA=ON      \  # lzmaライブラリを使用する場合
      ..
make -j $(nproc)
make install
# MesonおよびNinjaを使用する場合
meson setup ./build                                  \
    -Dprefix=<libxml2ライブラリのインストールディレクトリ> \
    -Dhttp=enabled                                  \
    -Dicu=enabled                                    \
    -Dlzma=enabled                                  \
    -Dzlib=enabled
ninja -C ./build
ninja -C ./build install
<br>
===== 要素の取得 =====
以下の例では、WebページのHTMLをダウンロードして、<head>タグ内の<title>タグの値を抽出している。<br>
以下の例では、WebページのHTMLをダウンロードして、<head>タグ内の<title>タグの値を抽出している。<br>
<br>
<br>