QXmlSimpleReader Class
QXmlSimpleReader クラスは、シンプルな XML パーサーの実装を提供します。詳細...
Header: | #include <QXmlSimpleReader> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
qmake: | QT += core5compat |
Inherits: | 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() 関数を使用して、入力を一度に読み込むことです:
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
再実装: (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)
再リンプルメント: (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 が真の場合、パーサーは、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) const.
contentHandler()も参照して ください。
[override virtual]
void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
再リンプルメント: (QXmlContentHandler *handler):QXmlReader::setDTDHandler(QXmlDTDHandler *handler).
[override virtual]
void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
再リンプルメント: (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() も参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。