QXmlSimpleReader Class
QXmlSimpleReader クラスは、シンプルな XML パーサーの実装を提供します。詳細...
| ヘッダー: | #include <QXmlSimpleReader> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
| 継承元: | QXmlReader |
警告:このクラスは再入可能ではありません。
パブリック関数
| QXmlSimpleReader() | |
| virtual | ~QXmlSimpleReader() |
| virtual bool | parse(const QXmlInputSource *input, bool incremental) |
| virtual bool | parseContinue() |
再実装されたパブリック関数
| virtual QXmlDTDHandler * | DTDHandler() const override |
| virtual QXmlContentHandler * | contentHandler() const override |
| virtual QXmlDeclHandler * | declHandler() const override |
| virtual QXmlEntityResolver * | entityResolver() const override |
| virtual QXmlErrorHandler * | errorHandler() const override |
| virtual bool | feature(const QString &name, bool *ok = nullptr) const override |
| virtual bool | hasFeature(const QString &name) const override |
| virtual bool | hasProperty(const QString &name) const override |
| virtual QXmlLexicalHandler * | lexicalHandler() const override |
| virtual bool | parse(const QXmlInputSource &input) override |
| virtual bool | parse(const QXmlInputSource *input) override |
| virtual void * | property(const QString &name, bool *ok = nullptr) const override |
| virtual void | setContentHandler(QXmlContentHandler *handler) override |
| virtual void | setDTDHandler(QXmlDTDHandler *handler) override |
| virtual void | setDeclHandler(QXmlDeclHandler *handler) override |
| virtual void | setEntityResolver(QXmlEntityResolver *handler) override |
| virtual void | setErrorHandler(QXmlErrorHandler *handler) override |
| virtual void | setFeature(const QString &name, bool enable) override |
| virtual void | setLexicalHandler(QXmlLexicalHandler *handler) override |
| virtual void | setProperty(const QString &name, void *value) override |
詳細な説明
この XML リーダーは、幅広いアプリケーションに適しています。ウェルフォームな XML を解析し、要素のネームスペースをコンテンツハンドラに報告することができますが、外部エンティティは解析しません。 歴史的な理由により、XML 1.0 仕様で規定されている属性値の正規化および行末の処理は行われません。
このクラスを最も簡単に使用するには、リーダーのインスタンスを作成し、入力ソースを定義し、リーダーが使用するハンドラを指定して、データを解析します。
たとえば、QFile を使用して入力を供給することができます。ここでは、リーダーを作成し、リーダーが使用する入力ソースを定義します。
QXmlSimpleReader xmlReader;
QXmlInputSource *source = new QXmlInputSource(file);ハンドラを使用すると、リーダーが特定の種類のコンテンツに遭遇したとき、または入力にエラーが見つかったときに、アクションを実行できます。リーダーには、イベントの種類ごとにどのハンドラを使用するかを指定する必要があります。多くの一般的なアプリケーションでは、QXmlDefaultHandler をサブクラス化してカスタムハンドラを作成し、これを使用してエラーイベントとコンテンツイベントの両方を処理できます。
Handler *handler = new Handler;
xmlReader.setContentHandler(handler);
xmlReader.setErrorHandler(handler);少なくともコンテンツハンドラとエラーハンドラを設定しない場合、パーサはデフォルトの動作にフォールバックし、何も実行しません。
入力を処理する最も便利な方法は、入力ソースを指定する引数を渡して `parse()` 関数を使用し、1回のパスで読み込むことです:
bool ok = xmlReader.parse(source);
if (!ok)
std::cout << "Parsing failed." << std::endl;入力全体を一括で解析できない場合(たとえば、データ量が膨大である場合や、ネットワーク接続を介して配信されている場合など)、データを断片的にパーサーに供給することができます。これは、parse() に増分処理を行うよう指示し、すべてのデータが処理されるまでparseContinue() 関数を順次呼び出すことで実現されます。
増分解析を行う一般的な方法は、network reply のreadyRead() シグナルをスロットに接続し、そこで受信したデータを処理することです。QNetworkAccessManager を参照してください。
setFeature() およびsetProperty() を使用することで、解析動作のさまざまな側面を調整できます。
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);QXmlSimpleReader は再入可能ではありません。スレッド化されたコードでこのクラスを使用する場合は、QMutex などのロック機構を使用して、QXmlSimpleReader によるコードをロックしてください。
なお、このクラスは現在非推奨となっています。XML ファイルの読み取りには、QXmlStreamReader または QDomDocument を使用してください。
メンバ関数のドキュメント
QXmlSimpleReader::QXmlSimpleReader()
単純なXMLリーダーを構築します。
[virtual noexcept] QXmlSimpleReader::~QXmlSimpleReader()
単純なXMLリーダーを破棄します。
[override virtual] QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
QXmlReader::DTDHandler() const を再実装します。
setDTDHandler()も参照してください 。
[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const
QXmlReader::contentHandler() const を再実装します。
setContentHandler()も参照してください 。
[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const
QXmlReader::declHandler() const を再実装します。
setDeclHandler()も参照してください 。
[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
QXmlReader::entityResolver() const を再実装します。
setEntityResolver()も参照してください 。
[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
QXmlReader::errorHandler() const を再実装します。
setErrorHandler()も参照してください 。
[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
QXmlReader::feature(const QString &name, bool *ok) const を再実装します。
setFeature()も参照してください 。
[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const
QXmlReader::hasFeature(const QString &name) const を再実装します。
[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const
QXmlReader::hasProperty(const QString &name) const を再実装します。
[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
QXmlReader::lexicalHandler() const を再実装します。
setLexicalHandler()も参照してください 。
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
QXmlReader::parse(const QXmlInputSource &input) を再実装します。
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input)
QXmlReader::parse(const QXmlInputSource *input) を再実装します。
input から XML ドキュメントを読み込み、1回のパス(非増分)で解析を行います。解析が成功した場合は `true ` を返し、失敗した場合は `false` を返します。
[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
input から XML ドキュメントを読み込み、それを解析します。解析が正常に完了した場合は `true ` を返し、エラーが発生した場合は `false` を返します。
incremental がfalseの場合、XMLファイルが完全に読み込まれていないと、この関数はfalseを返します。この場合、解析を続行することはできません。
incremental がtrueの場合、XMLファイルの末尾に到達する前にinput の末尾に到達しても、パーサーはfalseを返しません。その代わりに、パーサーの状態を保存し、後でデータが追加された際に解析を再開できるようにします。 このような場合、parseContinue() 関数を使用して解析を再開できます。このクラスは入力ソースinput へのポインタを保持しており、parseContinue() 関数はその入力ソースから読み込みを試みます。したがって、parseContinue() の呼び出しが不要になるまでは、入力ソースinput を削除してはいけません。
インクリメンタル解析が進行中の状態で、incremental をtrueに設定してこの関数を呼び出すと、新しい解析セッションが開始され、以前のセッションは失われます。
parseContinue() およびQTcpSocketも参照してください 。
[virtual] bool QXmlSimpleReader::parseContinue()
直近のparse()の呼び出しで指定されたQXmlInputSource からの入力を受け取り、インクリメンタル解析を継続します。この関数を使用するには、parse()を呼び出し、incremental引数をtrueに設定しておく必要があります。
パーシングエラーが発生した場合はfalse を返し、それ以外の場合は、XMLファイルの末尾に到達していなくてもtrue を返します。パーシング対象のデータがさらに利用可能になった時点で、この関数を再度呼び出すことで、後でパーシングを再開することができます。
入力ソースに解析可能なデータが存在しない状態でこの関数を呼び出すと、XML ファイルの末尾に達したことがリーダーに通知されます。この時点までに供給された入力がウェルフォームでなかった場合、解析エラーが発生し、false が返されます。 供給された入力がウェルフォームであった場合、`true`が返されます。この方法で入力を終了させることは、リーダーを再利用して他のXMLファイルを解析できるようにするため重要です。
ファイルの末尾に達した後、利用可能なデータがない状態でこの関数を呼び出すと、前の入力がウェルフォームであったかどうかにかかわらず、falseが返されます。
parse()、QXmlInputSource::data()、およびQXmlInputSource::next()も参照してください 。
[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
QXmlReader::property(const QString &name, bool *ok) const を再実装します。
setProperty()も参照してください 。
[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
QXmlReader::setContentHandler(QXmlContentHandler *handler) を再実装します。
contentHandler()も参照してください 。
[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
QXmlReader::setDTDHandler(QXmlDTDHandler *handler) を再実装します。
[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
QXmlReader::setDeclHandler(QXmlDeclHandler *handler) を再実装します。
declHandler()も参照してください 。
[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
QXmlReader::setEntityResolver(QXmlEntityResolver *handler) を再実装します。
entityResolver()も参照してください 。
[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
QXmlReader::setErrorHandler(QXmlErrorHandler *handler) を再実装します。
errorHandler()も参照してください 。
[override virtual] void QXmlSimpleReader::setFeature(const QString &name, bool enable)
QXmlReader::setFeature(const QString &name, bool value) を再実装します。
enable がtrueの場合、name 機能を有効にします。そうでない場合は無効にします。
name パラメータは、以下の文字列のいずれかでなければなりません:
| 機能 | デフォルト | 備考 |
|---|---|---|
| http://xml.org/sax/features/namespaces | true | 有効にすると、名前空間がコンテンツハンドラに報告されます。 |
| http://xml.org/sax/features/namespace-prefixes | false | 有効にすると、名前空間宣言に使用された元のプレフィックス付き名前および属性が報告されます。 |
| http://qt-project.org/xml/features/report-whitespace-only-CharData | true | 有効にすると、空白文字のみで構成される CharData は、QXmlContentHandler::characters() を使用して報告されます。無効にすると、空白は黙って破棄されます。 |
| http://qt-project.org/xml/features/report-start-end-entity | false | 有効にすると、パーサーは QXmlContentHandler::startEntity() および QXmlContentHandler::endEntity() イベントを報告するため、文字データはチャンク単位で報告される場合があります。無効にすると、パーサーはこれらのイベントを報告せず、エンティティを黙って置換し、文字データを 1 つのチャンクとして報告します。 |
feature() およびhasFeature()も参照してください 。
[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
QXmlReader::setLexicalHandler(QXmlLexicalHandler *handler) を再実装します。
lexicalHandler()も参照してください 。
[override virtual] void QXmlSimpleReader::setProperty(const QString &name, void *value)
QXmlReader::setProperty (const QString &name, void *value)を再実装します。
property()も参照してください 。
© 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.