📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 2行目: | 2行目: | ||
<br><br> | <br><br> | ||
== | == QXmlStreamReaderクラス == | ||
==== QXmlStreamReaderクラスとは ==== | |||
QXmlStreamReaderクラスは、XMLをシンプルなストリーミングAPIで読み込むための高速パーサである。<br> | |||
<br> | |||
ストリームリーダの基本的なコンセプトは、XMLドキュメントをトークンのストリームとして読み込むことである。<br> | |||
QXmlStreamReaderクラスとSAXの主な違いは、これらのXMLトークンの読み込み手順である。<br> | |||
<br> | |||
* SAXの場合 | |||
*: アプリケーションはパーサの都合に合わせてパーサからXMLイベントを受信するハンドラ (コールバック関数) を提供する必要がある。 | |||
* QXmlStreamReaderの場合 | |||
*: 繰り返し文を使用して、必要なトークンを次々にリーダから取り出すことができる。 | |||
*: これは、<code>readNext</code>メソッドを呼び出すことで実行され、リーダは次のトークンを完了するまで入力ストリームから読み取り、<code>tokenType</code>メソッドを返す。 | |||
*: その後、<code>isStartElement</code>メソッドや<code>text</code>メソッド等を使用してトークンを確認することにより、読み込まれているタグや要素についての情報を得ることができる。 | |||
<br> | |||
このプルアプローチのメリットは、再帰降順パーサを構築して、XMLを異なるメソッドやクラスに分割できることである。<br> | |||
これにより、XMLの解析を簡単に追跡することができる。<br> | |||
<br> | |||
==== サンプルコード ==== | |||
以下の例では、XMLファイルを読み込み、要素titleの値を抽出してコンソールへ出力している。<br> | 以下の例では、XMLファイルを読み込み、要素titleの値を抽出してコンソールへ出力している。<br> | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
| 38行目: | 55行目: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | |||
== Xerces-C++ライブラリ == | |||
==== Xerces-C++ライブラリとは ==== | |||
Apache XMLプロジェクトにより開発されたXMLパーサライブラリである。<br> | |||
C++で実装されており、XMLドキュメントの解析、生成、変更が可能であり、W3C標準に準拠しており、高度な機能を持つ。<br> | |||
<br> | |||
Xerces-C++ライブラリは、以下に示す特徴を持つ。<br> | |||
* W3C標準準拠 | |||
*: XML 1.0 / 1.1、DOM Level 1 / 2 / 3、SAX 1 / 2、XInclude、XML Schema、XPath、XSLT、名前空間等のXMLに関連する多くのW3C標準に準拠している。 | |||
* 高機能 | |||
*: 豊富な機能セットを持っており、XMLドキュメントの解析、検証、変更、生成等が可能である。 | |||
*: また、XPathやXSLT等の高度な機能もサポートしている。 | |||
* 安定性と信頼性 | |||
*: Apache XMLプロジェクトにより長年開発され続けており、安定性と信頼性が高い。 | |||
*: エンタープライズアプリケーションでの使用実績がある。 | |||
* 拡張性 | |||
*: プラグイン機構により、独自の機能を簡単に拡張できる。 | |||
*: 例えば、独自のXMLスキーマや文字エンコーディングを追加することが可能である。 | |||
* マルチスレッド対応 | |||
*: マルチスレッドプログラミングをサポートしている。 | |||
<br> | |||
ただし、Xerces-C++ライブラリは大規模なライブラリであるため、導入や習得にコストがかかる可能性がある。<br> | |||
また、パフォーマンス面では軽量なライブラリよりも劣ることがある。<br> | |||
<br> | |||
そのため、プロジェクトの要件次第では、TinyXMLやRapidXml等の軽量ライブラリも選択肢として検討する必要がある。<br> | |||
<br> | |||
一般的には、Xerces-C++ライブラリは高機能で標準準拠のXMLパーサーライブラリであり、本格的なXMLハンドリングが必要な場合に使用する。<br> | |||
<br> | |||
==== インストール ==== | |||
===== パッケージ管理システムからインストール ===== | |||
# RHEL | |||
sudo dnf install | |||
# SUSE | |||
sudo zypper install | |||
<br> | |||
===== ソースコードからインストール ===== | |||
Xerces-C++ライブラリのビルドに必要なライブラリをインストールする。<br> | |||
# RHEL | |||
sudo dnf install make cmake gcc gcc-c++ | |||
# SUSE | |||
sudo zypper install make cmake gcc gcc-c++ libcurl-devel libicu-devel | |||
<br> | |||
[https://xerces.apache.org/xerces-c/download.cgi Xerces-C++ライブラリの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf xerces-c-<バージョン>.tar.xz | |||
cd xerces-c-<バージョン> | |||
<br> | |||
Xerces-C++ライブラリをビルドおよびインストールする。<br> | |||
mkdir build && cd build | |||
cmake .. \ | |||
-DCMAKE_INSTALL_PREFIX=<Xerces-C++ライブラリのインストールディレクトリ> \ | |||
-DCMAKE_BUILD_TYPE=Release \ | |||
-Dmessage-loader=icu \ # オプション : 内部UTF-16と他のエンコーディングとの変換に使用するトランスコーダを指定する | |||
# 他に、inmemoryまたはiconv等も指定することができる | |||
-Dmessage-loader=icu # オプション : 診断メッセージへのアクセスに使用するメッセージローダを指定する | |||
# 他に、gnuiconvまたはiconvを指定することもできる | |||
-Dnetwork-accessor=curl # オプション : ネットワークリソースへのアクセスに使用するライブラリを指定する | |||
# 他に、"socket"を指定することもできる | |||
make -j $(nproc) | |||
make install | |||
<br><br> | <br><br> | ||