「Qtの基礎 - XML」の版間の差分
| 87行目: | 87行目: | ||
===== パッケージ管理システムからインストール ===== | ===== パッケージ管理システムからインストール ===== | ||
# RHEL | # RHEL | ||
sudo dnf install | sudo dnf install xerces-c | ||
# SUSE | # SUSE | ||
sudo zypper install | sudo zypper install xerces-c | ||
<br> | <br> | ||
===== ソースコードからインストール ===== | ===== ソースコードからインストール ===== | ||
Xerces-C++ライブラリのビルドに必要なライブラリをインストールする。<br> | Xerces-C++ライブラリのビルドに必要なライブラリをインストールする。<br> | ||
2024年3月28日 (木) 22:41時点における版
概要
QXmlStreamReaderクラス
QXmlStreamReaderクラスとは
QXmlStreamReaderクラスは、XMLをシンプルなストリーミングAPIで読み込むための高速パーサである。
ストリームリーダの基本的なコンセプトは、XMLドキュメントをトークンのストリームとして読み込むことである。
QXmlStreamReaderクラスとSAXの主な違いは、これらのXMLトークンの読み込み手順である。
- SAXの場合
- アプリケーションはパーサの都合に合わせてパーサからXMLイベントを受信するハンドラ (コールバック関数) を提供する必要がある。
- QXmlStreamReaderの場合
- 繰り返し文を使用して、必要なトークンを次々にリーダから取り出すことができる。
- これは、
readNextメソッドを呼び出すことで実行され、リーダは次のトークンを完了するまで入力ストリームから読み取り、tokenTypeメソッドを返す。 - その後、
isStartElementメソッドやtextメソッド等を使用してトークンを確認することにより、読み込まれているタグや要素についての情報を得ることができる。
このプルアプローチのメリットは、再帰降順パーサを構築して、XMLを異なるメソッドやクラスに分割できることである。
これにより、XMLの解析を簡単に追跡することができる。
サンプルコード
以下の例では、XMLファイルを読み込み、要素titleの値を抽出してコンソールへ出力している。
#include <QXmlStreamReader>
#include <QFile>
#include <QTextStream>
// XMLファイルを開く
QFile File("<XMLファイルのパス 例: hoge.xml>");
if(!File.open(QIODevice::ReadOnly)) {
std::cout << QString("ファイルのオープンに失敗 : %1").arg(File.errorString()) << std::endl;
return;
}
// XMLファイルを読み込む
QTextStream InStream(&File);
QString XMLData = InStream.readAll();
File.close();
// XMLファイルから特定の要素を抽出
QXmlStreamReader xml(XMLData);
while (!xml.atEnd() && !xml.hasError()) {
QXmlStreamReader::TokenType token = xml.readNext();
if (token == QXmlStreamReader::StartElement) {
if (xml.name() == "title") {
// 特定の要素が存在する場合は値をコンソールへ出力
xml.readNext();
std::cout << QString("Title : %1").arg(xml.text().toString()).toStdString() << std::endl;
}
}
}
if (xml.hasError()) {
std::cerr << QString("XML Error : %1").arg(xml.errorString()).toStdString() << std::endl;
}
Xerces-C++ライブラリ
Xerces-C++ライブラリとは
Apache XMLプロジェクトにより開発されたXMLパーサライブラリである。
C++で実装されており、XMLドキュメントの解析、生成、変更が可能であり、W3C標準に準拠しており、高度な機能を持つ。
Xerces-C++ライブラリは、以下に示す特徴を持つ。
- 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スキーマや文字エンコーディングを追加することが可能である。
- マルチスレッド対応
- マルチスレッドプログラミングをサポートしている。
ただし、Xerces-C++ライブラリは大規模なライブラリであるため、導入や習得にコストがかかる可能性がある。
また、パフォーマンス面では軽量なライブラリよりも劣ることがある。
そのため、プロジェクトの要件次第では、TinyXMLやRapidXml等の軽量ライブラリも選択肢として検討する必要がある。
一般的には、Xerces-C++ライブラリは高機能で標準準拠のXMLパーサーライブラリであり、本格的なXMLハンドリングが必要な場合に使用する。
インストール
パッケージ管理システムからインストール
# RHEL sudo dnf install xerces-c # SUSE sudo zypper install xerces-c
ソースコードからインストール
Xerces-C++ライブラリのビルドに必要なライブラリをインストールする。
# RHEL sudo dnf install make cmake gcc gcc-c++ libcurl-devel libicu-devel # SUSE sudo zypper install make cmake gcc gcc-c++ libcurl-devel libicu-devel
Xerces-C++ライブラリの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf xerces-c-<バージョン>.tar.xz cd xerces-c-<バージョン>
Xerces-C++ライブラリをビルドおよびインストールする。
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