「Qtの基礎 - XML」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

2行目: 2行目:
<br><br>
<br><br>


== QXmlStreamReaderクラスの使用 ==
== 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>



2024年3月28日 (木) 22:31時点における版

概要



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 

# SUSE
sudo zypper install 


ソースコードからインストール

Xerces-C++ライブラリのビルドに必要なライブラリをインストールする。

# RHEL
sudo dnf install make cmake gcc gcc-c++ 

# 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