QXmlStreamReader Class
QXmlStreamReader クラスは、整形式の XML をシンプルなストリーミング API で読み込むための高速パーサーです。詳細...
Header: | #include <QXmlStreamReader> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- 継承メンバを含むすべてのメンバの一覧
- QXmlStreamReaderは、XMLクラスの一部です。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
enum | Error { NoError, CustomError, NotWellFormedError, PrematureEndOfDocumentError, UnexpectedElementError } |
enum | ReadElementTextBehaviour { ErrorOnUnexpectedElement, IncludeChildElements, SkipChildElements } |
enum | TokenType { NoToken, Invalid, StartDocument, EndDocument, StartElement, …, ProcessingInstruction } |
プロパティ
- namespaceProcessing : bool
パブリック関数
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() |
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 を解析するためのシンプルなストリーミング API を提供します。これは、完全な XML を最初に DOM ツリーに読み込む代わりに使用します (QDomDocument を参照)。QXmlStreamReader は、QIODevice (setDevice() を参照) または生のQByteArray (addData() を参照) からデータを読み込みます。
Qt は 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パーサーです。エラーが発生しない限り、アプリケーション・コードは次のことを保証できます。
- ストリーム・リーダーが提供するデータは、W3Cの整形式XMLの基準を満たしている、
- トークンは有効な順序で提供されます。
QXmlStreamReader がエラーを発生させない限り、以下のことが保証されます:
- すべてのタグがネストされ、適切に閉じられている。
- 内部エンティティへの参照が正しい置換テキストで置換されている。
- 属性は、DTD の内部サブセットに従って正規化または追加されています。
- StartDocument 。コメントや処理命令を除けば、トークンは他のすべてのものより前に出現する。
- DOCTYPE要素(DTD 型のトークン)は最大で1つ存在する。
- 存在する場合、DOCTYPEはStartDocument 、コメントと処理命令を除いた他のすべての要素の前に現れる。
特に、StartElement 、EndElement 、Characters 、EntityReference 、EndDocument のいずれかのトークンが出現すると、StartDocument またはDTD型のトークンは出現しない。もし入力ストリームに、順序が異なるトークンが存在すると、エラーが発生する。
注意: トークン・タイプComment とProcessingInstruction は、ストリームのどこにあってもよい。
解析中にエラーが発生した場合、atEnd ()とhasError ()はtrueを返し、error ()は発生したエラーを返します。関数errorString()、lineNumber()、columnNumber()、characterOffset() は、適切なエラーまたは警告メッセージを作成するためのものです。アプリケーション・コードを簡素化するために、QXmlStreamReader には、raiseError() メカニズムがあり、説明したのと同じエラー処理をトリガーするカスタム・エラーを発生させることができます。
QXmlStream Bookmarks の例では、ストリーム・リーダーを使用して XML ブックマーク・ファイル (XBEL) を読み取るための再帰的降下手法の使用方法を説明しています。
名前空間
QXmlStream は XML 名前空間を理解し、解決します。例えば、StartElement の場合、namespaceUri() は要素が属する名前空間を返し、name() は要素のローカル名を返します。namespaceUri と name の組み合わせは、要素を一意に識別します。リーダが解析した XML エンティティで名前空間接頭辞が宣言されていない場合、namespaceUri は空です。
XML仕様に従って名前空間を利用しない、または名前空間を全く利用しないXMLデータを解析する場合、代わりに要素のqualifiedName ()を使用することができます。修飾名は、要素のprefix() の後にコロンが続き、その後に要素のローカルname() が続くものです。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::NoError | 0 | エラーは発生していません。 |
QXmlStreamReader::CustomError | 2 | raiseError() でカスタムエラーが発生しました。 |
QXmlStreamReader::NotWellFormedError | 3 | 読み込んだ XML が整形式でなかったため、パーサが内部的にエラーを発生させました。 |
QXmlStreamReader::PrematureEndOfDocumentError | 4 | 入力ストリームは、整形式XMLドキュメントが解析される前に終了した。addData() を呼び出すか、device() で到着を待つことで、ストリームにさらに XML が到着すれば、このエラーから回復できる。 |
QXmlStreamReader::UnexpectedElementError | 1 | パーサが期待したものと異なる要素またはトークンに遭遇した。 |
enum QXmlStreamReader::ReadElementTextBehaviour
この列挙型は、readElementText() のさまざまな動作を指定する。
定数 | 値 | 説明 |
---|---|---|
QXmlStreamReader::ErrorOnUnexpectedElement | 0 | 子要素に遭遇したとき、UnexpectedElementError を発生させ、これまでに読み込まれた内容を返す。 |
QXmlStreamReader::IncludeChildElements | 1 | 子要素からのテキストを再帰的に含めます。 |
QXmlStreamReader::SkipChildElements | 2 | 子要素をスキップする。 |
enum QXmlStreamReader::TokenType
この列挙型は、リーダーが今読んだトークンのタイプを指定します。
定数 | 値 | 説明 |
---|---|---|
QXmlStreamReader::NoToken | 0 | リーダはまだ何も読んでいない。 |
QXmlStreamReader::Invalid | 1 | error() とerrorString() で報告されるエラーが発生した。 |
QXmlStreamReader::StartDocument | 2 | リーダは、documentVersion() で XML バージョン番号を報告し、documentEncoding() で XML ドキュメントで指定されたエンコーディングを報告する。ドキュメントがスタンドアロン宣言されている場合、isStandaloneDocument() はtrue を返し、そうでない場合はfalse を返す。 |
QXmlStreamReader::EndDocument | 3 | リーダーは文書の終わりを報告する。 |
QXmlStreamReader::StartElement | 4 | リーダは要素の開始をnamespaceUri() とname() で報告する。空の要素もStartElementとして報告され、その後に直接EndElementが続きます。便利な関数readElementText ()を呼び出すと、対応するEndElementまでのすべての内容を連結することができます。属性はattributes() で、名前空間宣言はnamespaceDeclarations() で報告される。 |
QXmlStreamReader::EndElement | 5 | リーダは、要素の終わりをnamespaceUri() およびname() で報告する。 |
QXmlStreamReader::Characters | 6 | リーダーはtext() で文字を報告する。文字がすべて空白の場合、isWhitespace() はtrue を返す。文字がCDATAセクションに由来する場合、isCDATA() はtrue を返す。 |
QXmlStreamReader::Comment | 7 | リーダーはtext() でコメントを報告する。 |
QXmlStreamReader::DTD | 8 | リーダーは、text()でDTDを、notationDeclarations()で記法宣言を、entityDeclarations()で実体宣言を報告する。DTD宣言の詳細はdtdName()、dtdPublicId()、dtdSystemId()で報告されている。 |
QXmlStreamReader::EntityReference | 9 | リーダは、解決できなかった実体参照を報告します。参照名はname()で、置換テキストはtext()で報告される。 |
QXmlStreamReader::ProcessingInstruction | 10 | リーダはprocessingInstructionTarget() およびprocessingInstructionData() で処理命令を報告する。 |
プロパティ Documentation
namespaceProcessing : bool
このプロパティは、ストリーム・リーダーの名前空間処理フラグを保持する。
このプロパティは、ストリーム・リーダーが名前空間を処理するかどうかを制御する。有効な場合、リーダは名前空間を処理し、そうでない場合は処理しない。
デフォルトでは、名前空間処理は有効である。
関数にアクセスします:
bool | namespaceProcessing() const |
void | setNamespaceProcessing(bool) |
メンバ関数の説明
QXmlStreamReader::QXmlStreamReader()
ストリームリーダーを構築する。
[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() を持っている場合、この関数は何もしない。
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()が真を返し、error()がPrematureEndOfDocumentError を返す場合、XMLはこれまでに整形されているが、完全なXMLドキュメントが解析されていないことを意味する。XML がQByteArray から読み込まれている場合はaddData() で、XML がQIODevice から読み込まれている場合はさらなるデータの到着を待つことで、XML の次のチャンクを追加できる。
hasError()、error()、device()、QIODevice::atEnd()も参照 。
QXmlStreamAttributes QXmlStreamReader::attributes() const
StartElement の属性を返します。
qint64 QXmlStreamReader::characterOffset() const
現在の文字オフセットを返します。
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
単一の実体が展開できる最大文字数を返します。単一の実体が与えられた上限を超えて展開された場合、その文書はうまく形成されていないとみなされます。
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 Bookmarks Exampleでは、この関数を多用しています。
readNext()も参照してください 。
void QXmlStreamReader::setDevice(QIODevice *device)
現在のデバイスをdevice に設定します。 デバイスを設定すると、ストリームが初期状態にリセットされます。
device() およびclear() も参照して ください。
void QXmlStreamReader::setEntityExpansionLimit(int limit)
1つのエンティティが展開できる最大文字数をlimit に設定します。 1つのエンティティが指定された制限を超えて展開された場合、ドキュメントは正しく形成されていないとみなされます。
この制限は、再帰的なエンティティの展開によって利用可能なメモリをすべて使い果たしてしまうような、未知のXMLドキュメントを読み込む際のDoS攻撃を防ぐためにあります。
このプロパティのデフォルト値は4096文字である。
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()も参照してください 。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。