📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag… |
|||
| (同じ利用者による、間の6版が非表示) | |||
| 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> | ||
| 45行目: | 129行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="make"> | <syntaxhighlight lang="make"> | ||
# | # Qtプロジェクトファイル (.pro) | ||
# Pkg-configを使用する場合 | |||
CONFIG += link_pkgconfig | |||
PKGCONFIG += libxml-2.0 | |||
# Pkg-Configを使用しない場合 | |||
LIBS += -lxml2 | LIBS += -lxml2 | ||
INCLUDEPATH += /<libxml2のインストールディレクトリ>/include/libxml2 | INCLUDEPATH += /<libxml2のインストールディレクトリ>/include/libxml2 | ||
| 51行目: | 141行目: | ||
<br> | <br> | ||
<syntaxhighlight lang="cmake"> | <syntaxhighlight lang="cmake"> | ||
# | # CMakeLists.txtファイル | ||
# pkg-configを使うための準備 | |||
find_package(PkgConfig REQUIRED) | |||
# pkg-configを使用してlibxml2ライブラリを検索 | # pkg-configを使用してlibxml2ライブラリを検索 | ||
| 188行目: | 281行目: | ||
return app.exec(); | return app.exec(); | ||
} | } | ||
</syntaxhighlight> | |||
<br> | |||
<code>LIBXML_TEST_VERSION</code>マクロは、libxml2ライブラリを使用する場合に、ライブラリのバージョンが使用者のプログラムが期待するものと一致していることを保証するために用いられる。<br> | |||
このマクロは、libxml2のヘッダファイルをインクルードした後に呼び出すことにより、プログラムがリンクされるlibxml2ライブラリのバージョンがヘッダファイルで定義されているバージョンと互換性があるかどうかを確認する。<br> | |||
もし互換性が無ければ、実行時にエラーが発生する。<br> | |||
<br> | |||
<code>LIBXML_TEST_VERSION</code>マクロを使用する主な理由は、APIの非互換性による問題を防ぐことである。<br> | |||
libxml2ライブラリは頻繁に更新されるため、新しいバージョンのライブラリには古いバージョンのコードとは互換性のない新機能や変更が含まれることがある。<br> | |||
<code>LIBXML_TEST_VERSION</code>マクロを使用することにより、開発中にこの種の問題を早期に検出して対処することができる。<br> | |||
<br> | |||
したがって、<code>LIBXML_TEST_VERSION</code>マクロの記述は必須ではないが、<br> | |||
ライブラリのバージョンに依存する可能性のあるプログラムを開発している場合、特にライブラリの更新によって互換性の問題が生じる可能性がある場合には、このマクロを使用することを推奨する。<br> | |||
<br> | |||
これにより、将来的な互換性の問題を防ぐことができ、より安定したソフトウェアの開発が可能になる。<br> | |||
<br><br> | |||
== 文字実体参照 / 数値文字参照 == | |||
HMTLの文字実体参照や数値文字参照を通常の文字に変換する。<br> | |||
<br> | |||
<syntaxhighlight lang="cmake"> | |||
# CMakeを使用する場合 | |||
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui) | |||
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui) | |||
pkg_check_modules(QT_GUI Qt${QT_VERSION_MAJOR}Gui REQUIRED IMPORTED_TARGET) | |||
target_link_libraries(<ターゲット名> | |||
Qt${QT_VERSION_MAJOR}::Gui | |||
) | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="make"> | |||
# QMakeを使用する場合 | |||
QT += gui | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <QTextDocumentFragment> | |||
// 文字実体参照や数値文字参照を変換 | |||
QString plainText = QTextDocumentFragment::fromHtml(htmlString).toPlainText(); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] | ||