QXmlStreamWriter Class
QXmlStreamWriter クラスは、シンプルなストリーミング API を備えた XML 1.0 ライターを提供します。詳細...
| ヘッダー: | #include <QXmlStreamWriter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QXmlStreamWriter はXML クラスの一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
(since 6.10) enum class | Error { None, IO, Encoding, InvalidCharacter, Custom } |
プロパティ
- autoFormatting : bool
- autoFormattingIndent : int
(since 6.10)stopWritingOnError : bool
公開関数
| QXmlStreamWriter() | |
| QXmlStreamWriter(QByteArray *array) | |
| QXmlStreamWriter(QIODevice *device) | |
| QXmlStreamWriter(QString *string) | |
| ~QXmlStreamWriter() | |
| bool | autoFormatting() const |
| int | autoFormattingIndent() const |
| QIODevice * | device() const |
(since 6.10) QXmlStreamWriter::Error | error() const |
(since 6.10) QString | errorString() const |
| bool | hasError() const |
(since 6.10) void | raiseError(QAnyStringView message) |
| void | setAutoFormatting(bool enable) |
| void | setAutoFormattingIndent(int spacesOrTabs) |
| void | setDevice(QIODevice *device) |
| void | setStopWritingOnError(bool stop) |
| bool | stopWritingOnError() const |
| void | writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value) |
| void | writeAttribute(const QXmlStreamAttribute &attribute) |
| void | writeAttribute(QAnyStringView qualifiedName, QAnyStringView value) |
| void | writeAttributes(const QXmlStreamAttributes &attributes) |
| void | writeCDATA(QAnyStringView text) |
| void | writeCharacters(QAnyStringView text) |
| void | writeComment(QAnyStringView text) |
| void | writeCurrentToken(const QXmlStreamReader &reader) |
| void | writeDTD(QAnyStringView dtd) |
| void | writeDefaultNamespace(QAnyStringView namespaceUri) |
| void | writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name) |
| void | writeEmptyElement(QAnyStringView qualifiedName) |
| void | writeEndDocument() |
| void | writeEndElement() |
| void | writeEntityReference(QAnyStringView name) |
| void | writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {}) |
| void | writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {}) |
| void | writeStartDocument(QAnyStringView version) |
| void | writeStartDocument(QAnyStringView version, bool standalone) |
| void | writeStartDocument() |
| void | writeStartElement(QAnyStringView namespaceUri, QAnyStringView name) |
| void | writeStartElement(QAnyStringView qualifiedName) |
| void | writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text) |
| void | writeTextElement(QAnyStringView qualifiedName, QAnyStringView text) |
詳細な説明
QXmlStreamWriter は、XML を書き込むためのQXmlStreamReader に対応するクラスです。XML 1.0 仕様に準拠しており、XML 1.0 の構文、エスケープ規則、および文字の有効性制約に従ってドキュメントを書き込みます。
注:XML 1.1 はサポートされていません。出力でバージョン文字列を手動で設定することは可能ですが、追加の制御文字など、XML 1.1 に固有の機能を必要とするドキュメントは、このクラスを使用して生成することはできません。
関連するクラスと同様に、このクラスは `setDevice()` で指定された `QIODevice ` を操作します。API はシンプルでわかりやすいものです。書き込みたい XML トークンやイベントごとに、このライターは専用の関数を提供します。
ドキュメントはwriteStartDocument() で開始し、writeEndDocument() で終了します。これにより、開いたままになっているすべてのタグが暗黙的に閉じられます。
要素タグは、writeStartElement() で開始し、続いてwriteAttribute() またはwriteAttributes()、要素コンテンツ、そしてwriteEndElement() の順で記述します。空要素を記述するには、より簡潔な形式であるwriteEmptyElement() を使用でき、その後にwriteAttributes() を続けます。
要素の内容は、文字、エンティティ参照、またはネストされた要素のいずれかで構成されます。これは、writeCharacters()(禁止されているすべての文字や文字列のエスケープも処理します)、writeEntityReference()、またはwriteStartElement()の連続した呼び出しを使用して記述します。テキストのみを含む終端要素を記述するには、便利なメソッドwriteTextElement()を使用できます。
以下の短縮版コードスニペットは、インデント付きのフォーマット済みXMLを記述するためのこのクラスの基本的な使用例を示しています:
QXmlStreamWriter stream(&output);
stream.setAutoFormatting(true);
stream.writeStartDocument();
...
stream.writeStartElement("bookmark");
stream.writeAttribute("href", "http://qt-project.org/");
stream.writeTextElement("title", "Qt Project");
stream.writeEndElement(); // bookmark
...
stream.writeEndDocument();QXmlStreamWriterは名前空間のプレフィックス付けを自動的に処理するため、ユーザーは要素や属性を書き出す際にnamespaceUri を指定するだけで済みます。特定のプレフィックスに準拠する必要がある場合は、writeNamespace()またはwriteDefaultNamespace()を使用して名前空間を手動で宣言することで、ライターにそれらの使用を強制することができます。 あるいは、ストリームライターのネームスペース機能をバイパスし、代わりに修飾名を受け取るオーバーロードされたメソッドを使用することもできます。ネームスペースhttp://www.w3.org/XML/1998/namespaceは暗黙的に指定され、プレフィックスxml にマッピングされます。
ストリームライターは、要素間の空白部分に改行やインデントを追加することで、生成されたXMLデータを自動的に整形できます。これにより、XMLデータが人間にとって読みやすくなり、ほとんどのソースコード管理システムでの取り扱いが容易になります。この機能は、autoFormatting プロパティで有効にでき、autoFormattingIndent プロパティでカスタマイズできます。
その他の関数には、writeCDATA()、writeComment()、writeProcessingInstruction()、およびwriteDTD() があります。XML ストリームのチェーン処理は、writeCurrentToken() によってサポートされています。
QXmlStreamWriter は、常に XML を UTF-8 でエンコードします。
書き込み中にエラーが発生した場合、hasError() は true を返します。ただし、デフォルトでは、エラー発生時点で既にバッファに格納されていたデータ、または同じ操作内で書き込まれたデータは、引き続き基になるデバイスに書き込まれる可能性があります。 これは、Error::Encoding 、Error::InvalidCharacter 、およびユーザーによって発生させたError::Custom に適用されます。これを回避し、エラー発生後にデータが書き込まれないようにするには、stopWritingOnError プロパティを使用してください。このプロパティが有効になっている場合、最初のエラーで出力が直ちに停止し、ライターはそれ以降のすべての書き込み操作を無視します。アプリケーションは、エラー状態を最終的なものとみなし、エラー発生後はライターをこれ以上使用しないようにする必要があります。
「QXmlStream Bookmarks Example」では、QXmlStreamReader によって事前に読み込まれたXMLブックマークファイル(XBEL)を、ストリームライターを使用して書き込む方法を示しています。
メンバ型のドキュメント
[since 6.10] enum class QXmlStreamWriter::Error
この列挙型は、QXmlStreamWriter を使用して XML を書き出す際に発生し得るさまざまなエラーケースを指定します。
| 定数 | 値 | 説明 |
|---|---|---|
QXmlStreamWriter::Error::None | 0 | エラーは発生していません。 |
QXmlStreamWriter::Error::IO | 1 | デバイスへの書き込み中に I/O エラーが発生しました。 |
QXmlStreamWriter::Error::Encoding | 2 | 文字を出力形式に変換中にエンコーディングエラーが発生しました。 |
QXmlStreamWriter::Error::InvalidCharacter | 3 | 書き込み中に、XML 1.0 で許可されていない文字が検出されました。 |
QXmlStreamWriter::Error::Custom | 4 | raiseError() によってカスタムエラーが発生しました。 |
この列挙型は Qt 6.10 で導入されました。
プロパティのドキュメント
autoFormatting : bool
このプロパティは、ストリームライターの自動フォーマットフラグを保持します。
このプロパティは、ストリームライターが生成されたXMLデータを自動的にフォーマットするかどうかを制御します。有効にすると、ライターは要素間の空のセクション(無視可能な空白)に、自動的に改行とインデントを追加します。 自動フォーマットの主な目的は、データを複数の行に分割し、人間が読みやすいようにすることです。インデントの深さは、autoFormattingIndent プロパティで制御できます。
デフォルトでは、自動フォーマットは無効になっています。
アクセス関数:
| bool | autoFormatting() const |
| void | setAutoFormatting(bool enable) |
autoFormattingIndent : int
このプロパティは、自動書式設定が有効になっている場合に、インデントに使用されるスペースまたはタブの数を指定します。正の値はスペース、負の値はタブを表します。
デフォルトのインデントは 4 です。
アクセス関数:
| int | autoFormattingIndent() const |
| void | setAutoFormattingIndent(int spacesOrTabs) |
関連項目: autoFormatting 。
[since 6.10] stopWritingOnError : bool
このプロパティは、エラーが発生した後にデバイスへの書き込みを停止するかどうかを指定します。
このプロパティが `true` に設定されている場合、ライターはエラーが発生すると直ちに書き込みを停止し、それ以降のすべての書き込み操作を無視します。このプロパティが `false` に設定されている場合、ライターはエラー発生後も書き込みを継続することがあり、無効な書き込みはスキップしますが、それ以降の出力は許可されます。
これには、Error::InvalidCharacter 、Error::Encoding 、およびError::Custom が含まれることに注意してください。Error::IO は常に致命的なエラーとみなされ、この設定に関係なく書き込みが停止します。
デフォルト値はfalse です。
この列挙型は Qt 6.10 で導入されました。
アクセス関数:
| bool | stopWritingOnError() const |
| void | setStopWritingOnError(bool stop) |
メンバ関数のドキュメント
QXmlStreamWriter::QXmlStreamWriter()
ストリームライターを生成します。
setDevice()も参照してください 。
[explicit] QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)
array へ書き込みを行うストリームライターを生成します。これは、QBuffer デバイス上で動作し、そのデバイスがさらにarray 上で動作する XML ライターを作成することと同じです。
[explicit] QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)
device に書き込みを行うストリームライターを構築します。
[explicit] QXmlStreamWriter::QXmlStreamWriter(QString *string)
string に書き込みを行うストリームライターを構築します。
[noexcept] QXmlStreamWriter::~QXmlStreamWriter()
デストラクタ。
bool QXmlStreamWriter::autoFormatting() const
自動書式設定が有効になっている場合は `true ` を返し、そうでない場合は `false` を返します。
注: プロパティ autoFormattingのゲッター関数です 。
関連項目: setAutoFormatting()。
QIODevice *QXmlStreamWriter::device() const
QXmlStreamWriter に関連付けられている現在のデバイスを返します。デバイスが割り当てられていない場合は、nullptr を返します。
setDevice()も参照してください 。
[since 6.10] QXmlStreamWriter::Error QXmlStreamWriter::error() const
ライターの現在のエラー状態を返します。
エラーが発生していない場合、この関数はQXmlStreamWriter::Error::None を返します。
この関数は Qt 6.10 で導入されました。
errorString()、raiseError()、およびhasError()も参照してください 。
[since 6.10] QString QXmlStreamWriter::errorString() const
エラーが発生した場合、そのエラーに関連するエラーメッセージを返します。
エラーメッセージは、QXmlStreamWriter によって内部的に設定されるか、raiseError()を通じてユーザーによって指定されます。エラーが発生していない場合、この関数は空文字列を返します。
この関数は Qt 6.10 で導入されました。
error()、raiseError()、およびhasError()も参照してください 。
bool QXmlStreamWriter::hasError() const
データの書き込み中にエラーが発生した場合、true を返します。
エラーが `Error::IO` の場合、基になる `QIODevice ` へのその後の書き込みは失敗します。それ以外の場合は、形式が不正なデータがドキュメントに書き込まれる可能性があります。
エラーステータスは決してリセットされません。エラーが発生した後に実行される書き込みは、たとえエラー状態が解消されたとしても、無視される可能性があります。
error()、errorString()、およびraiseError()も参照してください 。
[since 6.10] void QXmlStreamWriter::raiseError(QAnyStringView message)
指定されたmessage を使用して、カスタムエラーを発生させます。
この関数は、アプリケーションレベルの検証失敗など、書き込み中にエラーが発生したことを手動で示すためのものです。
この関数は Qt 6.10 で導入されました。
errorString()、error()、およびhasError()も参照してください 。
void QXmlStreamWriter::setAutoFormatting(bool enable)
enable がtrue の場合、自動書式設定を有効にし、そうでない場合は無効にします。
デフォルト値は `false` です。
注: プロパティ `autoFormatting`のセッター 関数。
autoFormatting()も参照してください 。
void QXmlStreamWriter::setDevice(QIODevice *device)
現在のデバイスをdevice に設定します。ストリームをQByteArray に書き込みたい場合は、QBuffer デバイスを作成することができます。
device()も参照してください 。
void QXmlStreamWriter::writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value)
指定されたnamespaceUri を接頭辞として、name およびvalue で属性を書き込みます。名前空間がまだ宣言されていない場合、QXmlStreamWriter はそれに対する名前空間宣言を生成します。
この関数は、コンテンツが書き込まれる前の `writeStartElement()` の実行後、または `writeEmptyElement()` の実行後のみ呼び出すことができます。
注: Qt 6.5 以前のバージョンでは 、この関数はQString を受け取り、QAnyStringView ではありませんでした。
void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute &attribute)
attribute を書き込みます。
この関数は、コンテンツが書き込まれる前のwriteStartElement()の後、またはwriteEmptyElement()の後にのみ呼び出すことができます。
これはオーバーロードされた関数です。
void QXmlStreamWriter::writeAttribute(QAnyStringView qualifiedName, QAnyStringView value)
qualifiedName およびvalue を使用して属性を書き込みます。
この関数は、コンテンツが書き込まれる前の `writeStartElement()` の実行後、または `writeEmptyElement()` の実行後にのみ呼び出すことができます。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
これはオーバーロードされた関数です。
void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes &attributes)
属性ベクトル `attributes` を書き込みます。属性内で参照されている名前空間がまだ宣言されていない場合、QXmlStreamWriter はその名前空間の宣言を生成します。
この関数は、コンテンツが書き込まれる前の `writeStartElement()` の実行後、または `writeEmptyElement()` の実行後のみ呼び出すことができます。
writeAttribute() およびwriteNamespace()も参照してください 。
void QXmlStreamWriter::writeCDATA(QAnyStringView text)
text をCDATAセクションとして書き込みます。text に禁止されている文字列「]]>」が含まれている場合、それは複数のCDATAセクションに分割されます。
この関数は主に完全性を期すために存在します。通常、writeCharacters() がコンテンツ以外の文字をすべて自動的にエスケープするため、これを使用する必要はありません。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
void QXmlStreamWriter::writeCharacters(QAnyStringView text)
text を書き込みます。文字「<」、「&」、「""」は、エンティティ参照「<」、「&」、「"」としてエスケープされます。禁止シーケンス「]]>」を回避するため、「>」も「>」としてエスケープされます。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
writeEntityReference()も参照してください 。
void QXmlStreamWriter::writeComment(QAnyStringView text)
text を XML コメントとして書き込みます。ただし、text には、禁止されているシーケンス-- が含まれてはならず、また- で終わってはなりません。なお、XML では、コメント内で- をエスケープする方法は提供されていないことに注意してください。
注: Qt 6.5 以前のバージョンでは 、この関数は `QAnyStringView` ではなく `QString` を受け取っていました。
void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)
reader の現在の状態を書き込みます。有効な状態はすべてサポートされています。
この関数の目的は、XMLデータの連鎖処理をサポートすることです。
QXmlStreamReader::tokenType()も参照してください 。
void QXmlStreamWriter::writeDTD(QAnyStringView dtd)
DTDセクションを記述します。dtd は、XML 1.0仕様におけるdoctypedeclの生成規則全体を表します。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなく、QString を受け取っていました。
void QXmlStreamWriter::writeDefaultNamespace(QAnyStringView namespaceUri)
namespaceUri に対するデフォルトの名前空間宣言を記述します。
writeStartElement() またはwriteEmptyElement() が呼び出された場合、この宣言は現在の要素に適用されます。それ以外の場合は、次の子要素に適用されます。
なお、http://www.w3.org/XML/1998/namespace(xmlns にバインド)およびhttp://www.w3.org/2000/xmlns/(xml にバインド)という名前空間は、定義上、デフォルトとして宣言することはできません。
注: Qt 6.5 以前のバージョンでは 、この関数は `QAnyStringView` ではなく `QString` を受け取っていました。
void QXmlStreamWriter::writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name)
name で始まる空の要素を、指定されたnamespaceUri を接頭辞として付与して書き込みます。名前空間が宣言されていない場合、QXmlStreamWriter はその名前空間の宣言を生成します。その後、writeAttribute() を呼び出すと、この要素に属性が追加されます。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を引数としていました。
writeNamespace()も参照してください 。
void QXmlStreamWriter::writeEmptyElement(QAnyStringView qualifiedName)
修飾名qualifiedName を持つ空の要素を作成します。その後、writeAttribute()を呼び出すと、この要素に属性が追加されます。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を引数としていました。
これはオーバーロードされた関数です。
void QXmlStreamWriter::writeEndDocument()
残りのすべての開いている開始要素を閉じ、改行を書き込みます。
writeStartDocument()も参照してください 。
void QXmlStreamWriter::writeEndElement()
直前の開始要素を閉じます。
writeStartElement()も参照してください 。
void QXmlStreamWriter::writeEntityReference(QAnyStringView name)
エンティティ参照name を、"&name;" としてストリームに書き込みます。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
void QXmlStreamWriter::writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {})
`prefix` を使用して、namespaceUri に対する名前空間宣言を記述します。prefix が空の場合、QXmlStreamWriter は、文字「n」の後に数字が続く一意のプレフィックスを割り当てます。
writeStartElement() またはwriteEmptyElement() が呼び出された場合、宣言は現在の要素に適用されます。それ以外の場合は、次の子要素に適用されます。
プレフィックスxmlは、http://www.w3.org/XML/1998/namespace に対して事前定義され、予約されていることに注意してください。http://www.w3.org/XML/1998/namespace は、他のいかなるプレフィックスにもバインドすることはできません。 プレフィックスxmlnsおよびその URIhttp://www.w3.org/2000/xmlns/は、名前空間メカニズムそのもののために使用されるため、宣言では完全に使用が禁止されています。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなく、QString を受け取っていました。
void QXmlStreamWriter::writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {})
target およびdata を使用して XML 処理命令を記述します。ただし、data には「?>」という文字列が含まれていてはなりません。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
void QXmlStreamWriter::writeStartDocument(QAnyStringView version)
XMLバージョン番号「version 」で始まるドキュメントを作成します。
注:この関数はバージョン 文字列の妥当性を検証せず、手動での設定を許可します。ただし、QXmlStreamWriter は XML 1.0 のみをサポートしています。「1.0」以外のバージョン文字列を設定しても、ライタの動作やエスケープ規則は変更されません。宣言されたバージョンと実際のコンテンツとの整合性を確保するのは、呼び出し側の責任です。
注: Qt 6.5 以前のバージョンでは 、この関数は `QAnyStringView` ではなく `QString` を受け取っていました。
writeEndDocument()も参照してください 。
void QXmlStreamWriter::writeStartDocument(QAnyStringView version, bool standalone)
XMLバージョン番号「version 」と、standalone属性「standalone 」で始まるドキュメントを作成します。
注:この関数はバージョン 文字列の妥当性を検証せず、手動での設定を許可します。ただし、QXmlStreamWriter は XML 1.0 のみをサポートしています。「1.0」以外のバージョン文字列を設定しても、ライターの動作やエスケープ規則は変更されません。宣言されたバージョンと実際のコンテンツとの整合性を確保するのは、呼び出し側の責任です。
注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を受け取っていました。
writeEndDocument()も参照してください 。
void QXmlStreamWriter::writeStartDocument()
XMLバージョン番号「1.0」で始まるドキュメントを書き込みます。
これはオーバーロードされた関数です。
writeEndDocument()も参照してください 。
void QXmlStreamWriter::writeStartElement(QAnyStringView namespaceUri, QAnyStringView name)
指定されたnamespaceUri をプレフィックスとして、name を持つ開始要素を記述します。名前空間がまだ宣言されていない場合、QXmlStreamWriter はそれに対する名前空間宣言を生成します。その後、writeAttribute()を呼び出すと、この要素に属性が追加されます。
注: Qt 6.5 以前のバージョンでは 、この関数は `QAnyStringView` ではなく `QString` を受け取っていました。
関連項目: writeNamespace()、writeEndElement()、およびwriteEmptyElement()。
void QXmlStreamWriter::writeStartElement(QAnyStringView qualifiedName)
qualifiedName を使用して開始要素を記述します。その後、writeAttribute() を呼び出すと、この要素に属性が追加されます。
注: Qt 6.5以前のバージョンでは 、この関数の引数は `QString` であり、`QAnyStringView` ではありませんでした。
これはオーバーロードされた関数です。
writeEndElement() およびwriteEmptyElement()も参照してください 。
void QXmlStreamWriter::writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text)
name でテキスト要素を記述し、指定されたnamespaceUri をプレフィックスとして付け、text を適用します。名前空間が宣言されていない場合、QXmlStreamWriter はその名前空間の宣言を生成します。
これは、以下の記述と同等の利便性を高める関数です:
stream.writeStartElement(namespaceUri, name);
stream.writeCharacters(text);
stream.writeEndElement();注: Qt 6.5 以前のバージョンでは 、この関数はQAnyStringView ではなくQString を引数としていました。
void QXmlStreamWriter::writeTextElement(QAnyStringView qualifiedName, QAnyStringView text)
qualifiedName およびtext を使用してテキスト要素を描画します。
これは、以下のコードと同等の利便性を高める関数です:
stream.writeStartElement(qualifiedName);
stream.writeCharacters(text);
stream.writeEndElement();注: Qt 6.5以前のバージョンでは 、この関数は `QString` を受け取り、`QAnyStringView` は受け取りませんでした。
これはオーバーロードされた関数です。
© 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.