このページでは

QXmlStreamReader Class

QXmlStreamReader クラスは、シンプルなストリーミング API を通じて、ウェルフォームな XML 1.0 ドキュメントを読み込むための高速なパーサーを提供します。詳細...

ヘッダー: #include <QXmlStreamReader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注:このクラスのすべての関数は再入可能です。

パブリック型

enum Error { NoError, CustomError, NotWellFormedError, PrematureEndOfDocumentError, UnexpectedElementError }
enum ReadElementTextBehaviour { ErrorOnUnexpectedElement, IncludeChildElements, SkipChildElements }
enum TokenType { NoToken, Invalid, StartDocument, EndDocument, StartElement, …, ProcessingInstruction }

プロパティ

公開関数

QXmlStreamReader()
QXmlStreamReader(QAnyStringView data)
QXmlStreamReader(QIODevice *device)
QXmlStreamReader(const QByteArray &data)
~QXmlStreamReader()
void addData(QAnyStringView data)
void addData(const QByteArray &data)
void addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)
void addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)
bool atEnd() const
QXmlStreamAttributes attributes() const
qint64 characterOffset() const
void clear()
qint64 columnNumber() const
QIODevice *device() const
QStringView documentEncoding() const
QStringView documentVersion() const
QStringView dtdName() const
QStringView dtdPublicId() const
QStringView dtdSystemId() const
QXmlStreamEntityDeclarations entityDeclarations() const
int entityExpansionLimit() const
QXmlStreamEntityResolver *entityResolver() const
QXmlStreamReader::Error error() const
QString errorString() const
bool hasError() const
(since 6.6) bool hasStandaloneDeclaration() const
bool isCDATA() const
bool isCharacters() const
bool isComment() const
bool isDTD() const
bool isEndDocument() const
bool isEndElement() const
bool isEntityReference() const
bool isProcessingInstruction() const
bool isStandaloneDocument() const
bool isStartDocument() const
bool isStartElement() const
bool isWhitespace() const
qint64 lineNumber() const
QStringView name() const
QXmlStreamNamespaceDeclarations namespaceDeclarations() const
bool namespaceProcessing() const
QStringView namespaceUri() const
QXmlStreamNotationDeclarations notationDeclarations() const
QStringView prefix() const
QStringView processingInstructionData() const
QStringView processingInstructionTarget() const
QStringView qualifiedName() const
void raiseError(const QString &message = QString())
QString readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement)
QXmlStreamReader::TokenType readNext()
bool readNextStartElement()
(since 6.10) QString readRawInnerData()
void setDevice(QIODevice *device)
void setEntityExpansionLimit(int limit)
void setEntityResolver(QXmlStreamEntityResolver *resolver)
void setNamespaceProcessing(bool)
void skipCurrentElement()
QStringView text() const
QString tokenString() const
QXmlStreamReader::TokenType tokenType() const

詳細説明

QXmlStreamReader は、整形式の XML 1.0 ドキュメントを解析するためのシンプルなストリーミング API を提供します。これは、XML 全体を最初に DOM ツリーに読み込む方法(QDomDocument を参照)に代わる手段です。QXmlStreamReader は、QIODevice (setDevice() を参照)または生のQByteArray (addData() を参照)からデータを読み取ります。

注:QXmlStreamReaderは XMLバージョン1.0のみをサポートしています。「1.1」など、他のバージョンを宣言しているドキュメントでは、解析エラーが発生します。

Qt XML では、XML の書き込み用にQXmlStreamWriter が提供されています。

ストリームリーダーの基本概念は、SAXと同様に、XMLドキュメントをトークンのストリームとして報告することです。QXmlStreamReaderとSAXの主な違いは、これらのXMLトークンが報告される方法にあります。 SAX では、アプリケーションは、パーサーの都合に合わせてパーサーからいわゆる XMLイベントを受け取るハンドラ(コールバック関数)を提供する必要があります。QXmlStreamReader では、アプリケーションコード自体がループを駆動し、必要に応じてリーダーからトークンを次々と取得します。 これは、readNext() を呼び出すことで行われます。このメソッドを呼び出すと、リーダーは次のトークンの読み取りが完了するまで入力ストリームから読み込みを行い、完了時点でtokenType() を返します。その後、isStartElement() やtext() といった便利な関数群を使用して、トークンを検査し、読み込まれた内容に関する情報を取得することができます。 このプル方式の大きな利点は、再帰的降下パーサーを構築できる点にあります。つまり、XML解析コードを異なるメソッドやクラスに簡単に分割できます。これにより、XMLを解析する際にアプリケーション自身の状態を把握しやすくなります。

QXmlStreamReader を使用した典型的なループは、次のようになります。

QXmlStreamReader xml;
//...
while (!xml.atEnd()) {
    xml.readNext();
    //... do processing
}
if (xml.hasError()) {
    //... do error handling
}

QXmlStreamReader は、整形式のドキュメントを対象とした、検証を行わない、前方のみの XML 1.0 パーサーです。外部解析済みエンティティの処理や DTD 検証は行いません。エラーが発生しない限り、アプリケーションは以下の保証を信頼することができます:

  • XML コンテンツは、W3C が定める「整形式な XML 1.0」の基準を満たしている
  • 内部エンティティへの参照は、正しい置換テキストに置き換えられている。
  • 属性は、DTD の内部サブセットに従って正規化または追加される。
  • トークンは、ウェルフォームドなドキュメントとして正しい順序で提供される。
  • StartDocument トークン(存在する場合)は、コメントおよび処理指示を除き、他のすべての要素の前に配置される。
  • DOCTYPE 要素(DTD 型のトークン)は最大 1 つしか存在せず、存在する場合、他のすべてのコンテンツ(StartDocument 、コメント、および処理命令を除く)の前に配置されます。

特に、StartElement 、EndElement 、Characters 、EntityReference 、またはEndDocument のいずれかのタイプのトークンが検出されると、StartDocument または DTD のタイプのトークンは検出されなくなります。入力ストリーム内に、順序が乱れた状態でこれらのトークンが存在する場合、エラーが発生します。

注: トークン型 Comment およびProcessingInstruction は 、ストリームのどこにでも出現する可能性があります。

解析中にエラーが発生した場合、atEnd() およびhasError() は true を返し、error() は発生したエラーを返します。errorString()、lineNumber()、columnNumber()、およびcharacterOffset() 関数は、適切なエラーまたは警告メッセージを生成するためのものです。 アプリケーションコードを簡略化するため、QXmlStreamReader には、前述のエラー処理をトリガーするカスタムエラーを発生させることができる `raiseError()` メカニズムが備わっています。

QXmlStream Bookmarks Exampleは、再帰的下降手法を使用して、ストリームリーダーで XML ブックマークファイル (XBEL) を読み込む方法を示しています。

名前空間

QXmlStream は XML 名前空間を認識し、解決します。 たとえば、StartElement の場合、namespaceUri() は要素が属する名前空間を返し、name() は要素のローカル名を返します。namespaceUri と name の組み合わせにより、要素が一意に識別されます。リーダーによって解析された XML エンティティで名前空間プレフィックスが宣言されていない場合、namespaceUri は空になります。

XML仕様に従って名前空間を利用していない、あるいは名前空間をまったく使用していないXMLデータを解析する場合は、代わりに要素のqualifiedName()を使用できます。 修飾名は、要素の「prefix()」の後にコロン、さらにその後に要素のローカル「name()」が続く形式であり、これは生のXMLデータ内に要素が記述されている形式とまったく同じです。namespaceUri からプレフィックスへのマッピングは一意でも普遍的でもないため、名前空間に準拠したXMLデータを解析する際は、qualifiedName()の使用を避けるべきです。

宣言されていない名前空間プレフィックスを使用するスタンドアロンのドキュメントを解析するには、namespaceProcessing プロパティを使用して、名前空間の処理を完全に無効にすることができます。

増分解析

QXmlStreamReader は増分パーサーです。ドキュメントがチャンク単位で到着するため(たとえば、複数のファイルから、あるいはネットワーク接続を介して)、ドキュメントを一度にすべて解析できない場合にも対応できます。 ドキュメント全体の解析が完了する前にリーダーがデータ不足に陥った場合、PrematureEndOfDocumentError が発生します。addData() の呼び出し、あるいはネットワーク経由でdevice() を通じて追加のデータが入手可能になったことにより、さらなるデータが到着すると、リーダーはPrematureEndOfDocumentError エラーから回復し、次のreadNext() の呼び出しで新しいデータの解析を続行します。

たとえば、アプリケーションがnetwork access manager を使用してネットワークからデータを読み込む場合、マネージャーに対してnetwork request を発行し、その返り値としてnetwork reply を受け取ることになります。QNetworkReply はQIODevice であるため、そのreadyRead()シグナルをカスタムスロット(例:QNetworkAccessManager の解説で示したコードスニペット内のslotReadyRead() )に接続します。このスロット内で、readAll()を使用して利用可能なすべてのデータを読み取り、addData()を使用してXMLストリームリーダーに渡します。その後、リーダーからXMLイベントを読み取るカスタム解析関数を呼び出します。

パフォーマンスとメモリ消費

QXmlStreamReaderは、XMLドキュメントツリー全体をメモリに格納せず、報告された時点での現在のトークンのみを保持するように設計されているため、メモリ使用量を抑えることができます。 さらに、QXmlStreamReaderは、XMLドキュメントを便利でQtらしいAPIにマッピングするために通常必要となる、多数の小さな文字列の割り当てを回避します。これは、すべての文字列データを実際のQString オブジェクトではなく、QStringView として報告することで実現されています。これらのオブジェクトのいずれかでtoString()を呼び出すと、同等の実際のQString オブジェクトが返されます。

メンバ型のドキュメント

enum QXmlStreamReader::Error

この列挙型は、さまざまなエラーケースを指定します

定数値説明
QXmlStreamReader::NoError0エラーは発生していません。
QXmlStreamReader::CustomError2raiseError() によってカスタムエラーが発生しました
QXmlStreamReader::NotWellFormedError3読み込んだ XML がウェルフォームではないため、パーサーが内部でエラーを発生させました。
QXmlStreamReader::PrematureEndOfDocumentError4ウェルフォームな XML ドキュメントが解析される前に、入力ストリームが終了しました。このエラーからの回復は、addData() を呼び出すか、device() で XML が到着するのを待つことで、ストリームにさらに XML が届いた場合に可能です。
QXmlStreamReader::UnexpectedElementError1パーサーは、期待していたものとは異なる要素またはトークンを検出しました。

enum QXmlStreamReader::ReadElementTextBehaviour

この列挙型は、readElementText() のさまざまな動作を指定します。

定数定数値説明
QXmlStreamReader::ErrorOnUnexpectedElement0子要素が見つかったときに、UnexpectedElementError を発生させ、それまでに読み込まれた内容を返します。
QXmlStreamReader::IncludeChildElements1子要素のテキストを再帰的に含めます。
QXmlStreamReader::SkipChildElements2子要素をスキップします。

enum QXmlStreamReader::TokenType

この列挙型は、リーダーが読み取ったばかりのトークンの種類を指定します。

定数値説明
QXmlStreamReader::NoToken0リーダーはまだ何も読み込んでいません。
QXmlStreamReader::Invalid1エラーが発生しました。error() およびerrorString() で報告されます。
QXmlStreamReader::StartDocument2リーダーは、documentVersion() で XML のバージョン番号を報告し、documentEncoding() で XML ドキュメントで指定されたエンコーディングを報告します。ドキュメントがスタンドアロンとして宣言されている場合、isStandaloneDocument() はtrue を返し、そうでない場合はfalse を返します。
QXmlStreamReader::EndDocument3リーダーは、ドキュメントの終了を報告します。
QXmlStreamReader::StartElement4リーダーは、namespaceUri() およびname() を使用して要素の開始を報告します。空要素も StartElement として報告され、その直後に EndElement が続きます。利便性のための関数readElementText() を呼び出すことで、対応する EndElement までのすべてのコンテンツを連結することができます。属性はattributes() で、名前空間宣言はnamespaceDeclarations() で報告されます。
QXmlStreamReader::EndElement5リーダーは、namespaceUri() およびname() を使用して要素の終了を報告します。
QXmlStreamReader::Characters6リーダーは、text() 内で文字を報告します。文字がすべて空白の場合、isWhitespace() はtrue を返します。文字が CDATA セクションに由来する場合、isCDATA() はtrue を返します。
QXmlStreamReader::Comment7リーダーは、text() 内でコメントを報告します。
QXmlStreamReader::DTD8リーダーは、text() で DTD を、notationDeclarations() で表記宣言を、entityDeclarations() でエンティティ宣言を報告します。DTD 宣言の詳細は、dtdName()、dtdPublicId()、およびdtdSystemId() で報告されます。
QXmlStreamReader::EntityReference9リーダーは、解決できなかったエンティティ参照を報告します。参照名はname() に、置換テキストはtext() に記載されています。
QXmlStreamReader::ProcessingInstruction10リーダーは、processingInstructionTarget() およびprocessingInstructionData() で処理命令を報告します。

プロパティのドキュメント

namespaceProcessing : bool

このプロパティは、ストリームリーダーのネームスペース処理フラグを保持します。

このプロパティは、ストリームリーダーが名前空間を処理するかどうかを制御します。有効になっている場合、リーダーは名前空間を処理し、そうでない場合は処理しません。

デフォルトでは、名前空間処理は有効になっています。

アクセス関数:

bool namespaceProcessing() const
void setNamespaceProcessing(bool)

メンバ関数のドキュメント

QXmlStreamReader::QXmlStreamReader()

ストリームリーダーを生成します。

setDevice() およびaddData()も参照してください 。

[explicit] QXmlStreamReader::QXmlStreamReader(QAnyStringView data)

data から読み込む新しいストリームリーダーを作成します。

注: Qt 6.5 以前のバージョンでは 、このコンストラクタは `QString ` および `const char*` に対してオーバーロードされていました。

関連項目: addData()、clear()、およびsetDevice()。

[explicit] QXmlStreamReader::QXmlStreamReader(QIODevice *device)

device から読み込む新しいストリームリーダーを作成します。

setDevice() およびclear()も参照してください 。

[explicit] QXmlStreamReader::QXmlStreamReader(const QByteArray &data)

data から読み込む新しいストリームリーダーを作成します。

これはオーバーロードされた関数です。

addData()、clear()、およびsetDevice()も参照してください 。

[noexcept] QXmlStreamReader::~QXmlStreamReader()

読者を破壊する。

void QXmlStreamReader::addData(QAnyStringView data)

リーダーが読み込むためのdata を追加します。この関数は、リーダーがdevice()を持っている場合は何も行いません。

注: Qt 6.5 以前のバージョンでは 、この関数は `QString ` および `const char*` に対してオーバーロードされていました。

readNext() およびclear()も参照してください 。

void QXmlStreamReader::addData(const QByteArray &data)

リーダーが読み込むためのdata を追加します。この関数は、リーダーがdevice()を持っている場合は何もしません。

これはオーバーロードされた関数です。

readNext() およびclear()も参照してください 。

void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)

extraNamespaceDeclaration を追加します。この宣言は、現在の要素の子要素に対して有効となります。また、要素が読み込まれる前にこの関数が呼び出された場合は、XMLドキュメント全体に対して有効となります。

namespaceDeclarations()、addExtraNamespaceDeclarations()、およびsetNamespaceProcessing()も参照してください 。

void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)

extraNamespaceDeclarations で指定された宣言のベクトルを追加します。

namespaceDeclarations() およびaddExtraNamespaceDeclaration()も参照してください 。

bool QXmlStreamReader::atEnd() const

リーダーがXMLドキュメントの末尾まで読み込んだ場合、またはerror()が発生して読み取りが中止された場合、true を返します。それ以外の場合は、false を返します。

atEnd() およびhasError() が true を返し、error() がPrematureEndOfDocumentError を返す場合、それはこれまでの XML がウェルフォームであるものの、完全な XML ドキュメントがまだ解析されていないことを意味します。 XMLがQByteArray から読み込まれている場合はaddData()を使用して、XMLがQIODevice から読み込まれている場合はさらなるデータの到着を待つことで、次のXMLチャンクを追加できます。いずれの場合も、追加のデータが利用可能になると、atEnd()はfalseを返します。

hasError()、error()、device()、およびQIODevice::atEnd()も参照してください 。

QXmlStreamAttributes QXmlStreamReader::attributes() const

StartElement の属性を返します。

qint64 QXmlStreamReader::characterOffset() const

0を起点とする現在の文字オフセットを返します。

lineNumber() およびcolumnNumber()も参照してください 。

void QXmlStreamReader::clear()

リーダーからdevice() またはデータをすべて削除し、その内部状態を初期状態にリセットします。

addData()も参照してください 。

qint64 QXmlStreamReader::columnNumber() const

0から始まる現在の列番号を返します。

lineNumber() およびcharacterOffset()も参照してください 。

QIODevice *QXmlStreamReader::device() const

QXmlStreamReader に関連付けられている現在のデバイスを返します。デバイスが割り当てられていない場合は、nullptr を返します。

setDevice()も参照してください 。

QStringView QXmlStreamReader::documentEncoding() const

tokenType() がStartDocument の場合、この関数は XML 宣言で指定されたエンコーディング文字列を返します。それ以外の場合は、空の文字列が返されます。

QStringView QXmlStreamReader::documentVersion() const

tokenType() の値がStartDocument の場合、この関数は XML 宣言で指定されたバージョン文字列を返します。それ以外の場合は、空の文字列が返されます。

QStringView QXmlStreamReader::dtdName() const

tokenType() の値がDTD の場合、この関数は DTD の名前を返します。それ以外の場合は、空の文字列が返されます。

QStringView QXmlStreamReader::dtdPublicId() const

tokenType() の値がDTD の場合、この関数は DTD のパブリック識別子を返します。それ以外の場合は、空の文字列が返されます。

QStringView QXmlStreamReader::dtdSystemId() const

tokenType() の値がDTD の場合、この関数は DTD のシステム識別子を返します。それ以外の場合は、空の文字列が返されます。

QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const

tokenType() がDTD の場合、この関数は DTD の未解析の(外部)エンティティ宣言を返します。それ以外の場合は、空のベクトルが返されます。

QXmlStreamEntityDeclarations クラスは、QXmlStreamEntityDeclaration のQList として定義されています。

int QXmlStreamReader::entityExpansionLimit() const

1つのエンティティが展開できる最大文字数を返します。1つのエンティティが指定された制限を超えて展開された場合、そのドキュメントはウェルフォームとみなされません。

setEntityExpansionLimitも参照してください 。

QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const

エンティティリゾルバーを返します。エンティティリゾルバーが存在しない場合は、nullptr を返します。

setEntityResolver()も参照してください 。

QXmlStreamReader::Error QXmlStreamReader::error() const

現在のエラーの型を返します。エラーが発生していない場合は、NoError を返します。

errorString() およびraiseError()も参照してください 。

QString QXmlStreamReader::errorString() const

raiseError() で設定されたエラーメッセージを返します。

error()、lineNumber()、columnNumber()、およびcharacterOffset()も参照してください 。

bool QXmlStreamReader::hasError() const

エラーが発生した場合は `true ` を返し、そうでない場合は `false` を返します。

errorString() およびerror()も参照してください 。

[since 6.6] bool QXmlStreamReader::hasStandaloneDeclaration() const

このドキュメントに明示的なスタンドアロン宣言がある場合、true を返します('yes'または'no'のいずれか)。そうでない場合は、false を返します。

XML宣言が解析されていない場合、この関数は `false` を返します。

この関数は Qt 6.6 で導入されました。

isStandaloneDocument()も参照してください 。

bool QXmlStreamReader::isCDATA() const

リーダーがCDATAセクションに由来する文字を報告した場合はtrue を返し、それ以外の場合はfalse を返します。

isCharacters() およびtext()も参照してください 。

bool QXmlStreamReader::isCharacters() const

tokenType() の値がCharacters と等しい場合はtrue を返し、そうでない場合はfalse を返します。

isWhitespace() およびisCDATA()も参照してください 。

bool QXmlStreamReader::isComment() const

tokenType() の結果がComment と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isDTD() const

tokenType() の値がDTD と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isEndDocument() const

tokenType() の値がEndDocument と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isEndElement() const

tokenType() の値がEndElement に等しい場合は、true を返します。そうでない場合は、false を返します。

bool QXmlStreamReader::isEntityReference() const

tokenType() の結果がEntityReference と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isProcessingInstruction() const

tokenType() の値がProcessingInstruction と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isStandaloneDocument() const

このドキュメントがXML宣言でスタンドアロンとして宣言されている場合はtrue を返し、そうでない場合はfalse を返します。

XML宣言が解析されていない場合、この関数は `false` を返します。

hasStandaloneDeclaration()も参照してください 。

bool QXmlStreamReader::isStartDocument() const

tokenType() の値がStartDocument と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isStartElement() const

tokenType() の値がStartElement と等しい場合はtrue を返し、そうでない場合はfalse を返します。

bool QXmlStreamReader::isWhitespace() const

リーダーが空白文字のみで構成される文字を報告した場合は `true ` を返し、それ以外の場合は `false` を返します。

isCharacters() およびtext()も参照してください 。

qint64 QXmlStreamReader::lineNumber() const

現在の行番号を、1から数えて返します。

columnNumber() およびcharacterOffset()も参照してください 。

QStringView QXmlStreamReader::name() const

StartElement 、EndElement 、またはEntityReference のローカル名を返します。

namespaceUri() およびqualifiedName()も参照してください 。

QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const

tokenType() がStartElement の場合、この関数は要素の名前空間宣言を返します。それ以外の場合は、空のベクトルを返します。

QXmlStreamNamespaceDeclarations クラスは、QXmlStreamNamespaceDeclaration のQList として定義されています。

addExtraNamespaceDeclaration() およびaddExtraNamespaceDeclarations()も参照してください 。

QStringView QXmlStreamReader::namespaceUri() const

StartElement またはEndElement の namespaceUri を返します。

name() およびqualifiedName()も参照してください 。

QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const

tokenType() の値がDTD の場合、この関数は DTD の表記宣言を返します。それ以外の場合は、空のベクトルを返します。

QXmlStreamNotationDeclarations クラスは、QXmlStreamNotationDeclaration のQList として定義されています。

QStringView QXmlStreamReader::prefix() const

StartElement またはEndElement の接頭辞を返します。

name() およびqualifiedName()も参照してください 。

QStringView QXmlStreamReader::processingInstructionData() const

ProcessingInstruction のデータを返します。

QStringView QXmlStreamReader::processingInstructionTarget() const

ProcessingInstruction のターゲットを返します。

QStringView QXmlStreamReader::qualifiedName() const

StartElement またはEndElement の修飾名を返します。

修飾名とは、XML データ内の要素の生の名前です。これは、名前空間プレフィックス、コロン、そして要素のローカル名で構成されます。 名前空間プレフィックスは一意ではないため(同じプレフィックスが異なる名前空間を指すこともあれば、異なるプレフィックスが同じ名前空間を指すこともある)、qualifiedName() を使用せず、解決済みのnamespaceUri() および属性のローカル名name() を使用する必要があります。

name()、prefix()、およびnamespaceUri()も参照してください 。

void QXmlStreamReader::raiseError(const QString &message = QString())

オプションでエラーmessage を指定して、カスタムエラーを発生させます。

error() およびerrorString()も参照してください 。

QString QXmlStreamReader::readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement)

StartElement が読み込まれた場合に呼び出される便利な関数です。対応するEndElement まで読み込み、その間のすべてのテキストを返します。エラーが発生しなかった場合、この関数を呼び出した後の現在のトークン(tokenType()を参照)はEndElement となります。

この関数は、Characters またはEntityReference のトークンを読み込んだ際にtext() を連結しますが、ProcessingInstruction およびComment はスキップします。現在のトークンがStartElement でない場合、空の文字列が返されます。

behaviour は、EndElement に到達する前に他のデータが読み込まれた場合の挙動を定義します。この関数は、子要素のテキストを含める(HTMLなどで有用)、子要素を無視する、あるいはUnexpectedElementError を発生させてそれまでに読み込まれた内容を返す(デフォルト)といった動作をとることができます。

QXmlStreamReader::TokenType QXmlStreamReader::readNext()

次のトークンを読み取り、その型を返します。

1つの例外を除き、readNext()によってerror()が報告されると、XMLストリームのそれ以上の読み取りは不可能になります。その場合、atEnd()はtrue を返し、hasError()はtrue を返し、この関数はQXmlStreamReader::Invalid を返します。

例外となるのは、error()がPrematureEndOfDocumentError を返す場合です。このエラーは、形式的には正しいXMLチャンクの末尾に到達したものの、そのチャンクが完全なXMLドキュメントを表していない場合に報告されます。 その場合、ストリームがQByteArray から読み込まれているときはaddData()を呼び出して次のXMLチャンクを追加するか、ストリームがdevice()から読み込まれているときは、さらなるデータの到着を待つことで、解析を再開することができます。

tokenType() およびtokenString()も参照してください 。

bool QXmlStreamReader::readNextStartElement()

現在の要素内の次の開始要素まで読み込みます。開始要素に到達した場合は、true を返します。終了要素に到達した場合、またはエラーが発生した場合は、falseを返します。

現在の要素とは、直近で解析された開始要素に一致し、かつそれに対応する終了要素にまだ到達していない要素のことです。パーサーが終了要素に到達すると、現在の要素は親要素になります。

これは、XML要素の解析のみを目的とする場合に便利な関数です。「QXmlStream ブックマークの例」では、この関数が多用されています。

readNext()も参照してください 。

[since 6.10] QString QXmlStreamReader::readRawInnerData()

現在の要素の生の内部XMLコンテンツを読み取り、返します。この関数は、ネストされたタグ、テキスト、コメント、処理命令、CDATAセクション、その他のマークアップを含め、要素内に埋め込まれた完全なコンテンツを、元のXML構造を保持したまま取得するのに役立ちます。

現在の要素とは、直近で解析された開始要素に一致し、かつ対応する終了要素にまだ到達していない要素のことです。パーサーが終了要素に到達すると、現在の要素は親要素になります。

注: DTDで定義されたエンティティ 参照は、DTD宣言が個別に処理され、要素の内容の一部ではないため、解析中に解決され、プレーンテキストとして返されます。出力では、5つの事前定義されたXMLエンティティ(&lt; 、&gt; 、&amp; 、&apos; 、&quot )のみが再エスケープされます。

この関数は Qt 6.10 で導入されました。

void QXmlStreamReader::setDevice(QIODevice *device)

現在のデバイスをdevice に設定します。デバイスを設定すると、ストリームは初期状態にリセットされます。

device() およびclear()も参照してください 。

void QXmlStreamReader::setEntityExpansionLimit(int limit)

1つのエンティティが展開できる最大文字数をlimit に設定します。1つのエンティティが指定された制限を超えて展開された場合、そのドキュメントはウェルフォームとみなされません。

この制限は、未知のXMLドキュメントを読み込む際に、再帰的なエンティティ展開によって利用可能なメモリがすべて消費されてしまう可能性があり、DoS攻撃を防ぐために設けられています。

このプロパティのデフォルト値は 4096 文字です。

組み込みの XML エンティティ (&lt; など) をサポートするため、最小値は 1 です。

entityExpansionLimitも参照してください 。

void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)

resolver を新しいentityResolver()にします。

ストリームリーダーはリゾルバーの所有権を取得しません。ストリームリーダーオブジェクトの存続期間全体、あるいは別のリゾルバーまたはnullptr が設定されるまで、リゾルバーが有効であることを保証するのは呼び出し側の責任です。

entityResolver()も参照してください 。

void QXmlStreamReader::skipCurrentElement()

現在要素の末尾まで読み込み、子ノードはすべてスキップします。この関数は、未知の要素をスキップするのに役立ちます。

現在の要素とは、直前に解析された開始要素に一致し、かつ対応する終了要素にまだ到達していない要素のことです。パーサーが終了要素に到達すると、現在の要素は親要素となります。

QStringView QXmlStreamReader::text() const

Characters 、Comment 、DTD 、またはEntityReference のテキストを返します。

QString QXmlStreamReader::tokenString() const

リーダーの現在のトークンを文字列として返します。

tokenType()も参照してください 。

QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const

現在のトークンの型を返します。

現在のトークンは、isStartDocument()、isEndDocument()、isStartElement()、isEndElement()、isCharacters()、isComment()、isDTD()、isEntityReference()、およびisProcessingInstruction()といった便利な関数でも取得できます。

tokenString()も参照してください 。

© 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.