XMLストリーミング

Qt には、シンプルなストリーミング API を通じて XML を読み書きするための 2 つのクラス、QXmlStreamReader とQXmlStreamWriter が用意されています。これらのクラスはQt Serialization(QtCore の一部)に含まれています。

ストリームリーダーは、XMLドキュメントをトークンのストリームとして返します。これはSAXとは異なります。SAXアプリケーションでは、パーサーからXMLイベントを受け取るためのハンドラを提供するのに対し、QXmlStreamReader はループを駆動し、必要なときにリーダーからトークンを取得します。 この「引き出し」方式により、再帰的下降型パーサーの構築が可能となり、XML 解析コードを異なるメソッドやクラスに分割できるようになります。

QXmlStreamReader は、外部解析済みエンティティを除外する、ウェルフォームな XML 1.0 パーサーです。したがって、エラーが発生しない限り、ストリームリーダーから提供されるデータは、W3C のウェルフォームな XML に関する基準に準拠しています。エラーが発生した場合は、atEnd()、error()、hasError() などの関数を使用して、エラーを確認および表示できます。

QXmlStreamReader を使用する実装例としては、QXmlStream Bookmarks Example にあるXbelReaderが挙げられます。これはQXmlStreamReader をラップしたものです。QXmlStreamReader クラスの使用方法について詳しく知りたい場合は、その実装を参照してください。

QXmlStreamReader と対をなすのが、QXmlStreamWriter クラスです。これは、XML ライターにシンプルなストリーミング API を提供します。QXmlStreamWriter はQIODevice 上で動作し、writeDTD()、writeCharacters()、writeComment() など、書き込みたいすべての XML トークンやイベントに対応した専用関数を備えています。

QXmlStreamWriter を使用して XML ドキュメントを記述するには、writeStartDocument() 関数でドキュメントを開始し、writeEndDocument() で終了します。これにより、残っているすべての未閉じたタグが暗黙的に閉じられます。要素タグはwriteStartDocument() で開始し、その後にwriteAttribute() またはwriteAttributes()、要素コンテンツ、そしてwriteEndDocument() を続けます。また、writeEmptyElement() を使用して空要素を記述することもできます。

要素の内容は、文字、エンティティ参照、またはネストされた要素で構成されます。内容は、禁止されているすべての文字や文字列のエスケープ処理も行う関数であるwriteCharacters()、writeEntityReference()、あるいはwriteStartElement()を連続して呼び出すことで記述できます。

『QXmlStream Bookmarks Example』のXbelWriterクラスは、QXmlStreamWriter をラップしています。QXmlStreamWriter クラスの使用方法については、その実装を参照してください。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.