このページでは

QDomDocument Class

QDomDocument クラスは、XML ドキュメントを表します。詳細...

ヘッダー: #include <QDomDocument>
CMake: find_package(Qt6 REQUIRED COMPONENTS Xml)
target_link_libraries(mytarget PRIVATE Qt6::Xml)
qmake: QT += xml
継承元: QDomNode

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

パブリック型

(since 6.5) struct ParseResult
(since 6.5) enum class ParseOption { Default, UseNamespaceProcessing, PreserveSpacingOnlyNodes }
flags ParseOptions

パブリック関数

QDomDocument()
QDomDocument(const QDomDocumentType &doctype)
QDomDocument(const QString &name)
QDomDocument(const QDomDocument &document)
~QDomDocument()
QDomAttr createAttribute(const QString &name)
QDomAttr createAttributeNS(const QString &nsURI, const QString &qName)
QDomCDATASection createCDATASection(const QString &value)
QDomComment createComment(const QString &value)
QDomDocumentFragment createDocumentFragment()
QDomElement createElement(const QString &tagName)
QDomElement createElementNS(const QString &nsURI, const QString &qName)
QDomEntityReference createEntityReference(const QString &name)
QDomProcessingInstruction createProcessingInstruction(const QString &target, const QString &data)
QDomText createTextNode(const QString &value)
QDomDocumentType doctype() const
QDomElement documentElement() const
QDomElement elementById(const QString &elementId)
QDomNodeList elementsByTagName(const QString &tagname) const
QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName)
QDomImplementation implementation() const
QDomNode importNode(const QDomNode &importedNode, bool deep)
QDomNode::NodeType nodeType() const
(since 6.5) QDomDocument::ParseResult setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)
QByteArray toByteArray(int indent = 1) const
QString toString(int indent = 1) const
QDomDocument &operator=(const QDomDocument &other)

詳細な説明

QDomDocument クラスは、XML ドキュメント全体を表します。概念的には、ドキュメントツリーのルートであり、ドキュメントのデータへの主要なアクセスを提供します。

要素、テキストノード、コメント、処理命令などは、ドキュメントのコンテキストの外には存在できないため、ドキュメントクラスには、これらのオブジェクトを作成するために必要なファクトリ関数も含まれています。作成されたノードオブジェクトには、ownerDocument() 関数が用意されており、この関数によって、ノードオブジェクトは、それが作成されたコンテキスト内のドキュメントに関連付けられます。 最も頻繁に使用されるDOMクラスは、QDomNode 、QDomDocument、QDomElement 、およびQDomText です。

解析されたXMLは、内部的にはオブジェクトのツリーとして表現されており、さまざまなQDomクラスを使用してこれにアクセスできます。すべてのQDomクラスは、内部ツリー内のオブジェクトのみを参照します。DOMツリー内の内部オブジェクトは、それらを参照している最後のQDomオブジェクト、またはQDomDocument自体が削除されると、削除されます。

要素やテキストノードなどの作成は、このクラスが提供するさまざまなファクトリ関数を使用して行われます。QDomクラスのデフォルトコンストラクタを使用しても、操作やドキュメントへの挿入ができない空のオブジェクトが生成されるだけです。

QDomDocumentクラスには、ドキュメントデータを作成するためのいくつかの関数があります。例えば、createElement()、createTextNode()、createComment()、createCDATASection()、createProcessingInstruction()、createAttribute()、createEntityReference()などです。 これらの関数の中には、名前空間をサポートするバージョンがあります。具体的には、createElementNS() やcreateAttributeNS() などです。createDocumentFragment() 関数は、ドキュメントの一部を保持するために使用されます。これは、複雑なドキュメントを操作する際に役立ちます。

ドキュメントのコンテンツ全体は、setContent() で設定されます。この関数は、引数として渡された文字列を XML ドキュメントとして解析し、そのドキュメントを表す DOM ツリーを作成します。ルート要素は、documentElement() を使用して取得できます。ドキュメントのテキスト表現は、toString() を使用して取得できます。

注: XMLドキュメントが大きい場合、DOMツリーが 大量のメモリを消費する可能性があります。そのようなドキュメントについては、QXmlStreamReader クラスを使用する方が適している場合があります。

importNode() を使用すると、別のドキュメントからノードをこのドキュメントに挿入することができます。

elementsByTagName() またはelementsByTagNameNS() を使用すると、特定のタグを持つすべての要素のリストを取得できます。

QDom クラスは通常、次のように使用されます。

QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
    return;
if (!doc.setContent(&file)) {
    file.close();
    return;
}
file.close();

// print out the element names of all elements that are direct children
// of the outermost element.
QDomElement docElem = doc.documentElement();

QDomNode n = docElem.firstChild();
while(!n.isNull()) {
    QDomElement e = n.toElement(); // try to convert the node to an element.
    if(!e.isNull()) {
        cout << qPrintable(e.tagName()) << '\n'; // the node really is an element.
    }
    n = n.nextSibling();
}

// Here we append a new element to the end of the document
QDomElement elem = doc.createElement("img");
elem.setAttribute("src", "myimage.png");
docElem.appendChild(elem);

doc およびelem のスコープ外になると、XML ドキュメントを表す内部ツリー全体が削除されます。

DOM を使用してドキュメントを作成するには、次のようなコードを使用します:

QDomDocument doc;
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);

QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);

QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);

QString xml = doc.toString();

Document Object Model(DOM)に関する詳細については、『Document Object Model (DOM)Level 1およびLevel 2 Core仕様』を参照してください。

「DOMブックマークアプリケーション」も参照してください 。

メンバ型のドキュメント

[since 6.5] enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions

この列挙型は、setContent() メソッドを使用して XML ドキュメントを解析する際に使用可能なオプションを表しています。

定数定数名説明
QDomDocument::ParseOption::Default0x00解析オプションは設定されていません。
QDomDocument::ParseOption::UseNamespaceProcessing0x01名前空間処理が有効になります。
QDomDocument::ParseOption::PreserveSpacingOnlyNodes0x02スペース文字のみを含むテキストノードは保持されます。

この列挙型は Qt 6.5 で導入されました。

ParseOptions 型は、QFlags<ParseOption> の typedef です。これは、ParseOption 値の OR 組み合わせを格納します。

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

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

QDomDocument::QDomDocument()

空のドキュメントを作成します。

[explicit] QDomDocument::QDomDocument(const QDomDocumentType &doctype)

ドキュメントタイプ「doctype 」のドキュメントを作成します。

QDomImplementation::createDocumentType()も参照してください 。

[explicit] QDomDocument::QDomDocument(const QString &name)

ドキュメントを作成し、ドキュメントタイプの名前を「name 」に設定します。

QDomDocument::QDomDocument(const QDomDocument &document)

document のコピーを作成します。

このコピーのデータは共有されています(浅いコピー):一方のノードを変更すると、もう一方のノードも変更されます。深いコピーを作成したい場合は、cloneNode() を使用してください。

[noexcept] QDomDocument::~QDomDocument()

オブジェクトを破棄し、そのリソースを解放します。

QDomAttr QDomDocument::createAttribute(const QString &name)

name という名前の新しい属性を作成します。この属性は、例えば `QDomElement::setAttributeNode()` などを使用して、要素に挿入することができます。

name が有効な XML 名でない場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

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

QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)

要素に挿入可能な、名前空間をサポートする新しい属性を作成します。属性名は `qName `、名前空間 URI は `nsURI` です。また、この関数は `QDomNode::prefix()` および `QDomNode::localName()` を(`qName` に応じて)適切な値に設定します。

qName が有効な XML 名でない場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

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

QDomCDATASection QDomDocument::createCDATASection(const QString &value)

文字列 `value ` に対して、ドキュメントに挿入可能な新しい CDATA セクションを作成します。例えば、QDomNode::appendChild() を使用することで挿入できます。

value に CDATA セクションに格納できない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomComment QDomDocument::createComment(const QString &value)

文字列 `value ` に対する新しいコメントを作成します。このコメントは、例えば `QDomNode::appendChild()` などを使用して、ドキュメントに挿入することができます。

value に XML コメントとして保存できない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomDocumentFragment QDomDocument::createDocumentFragment()

新しいドキュメントフラグメントを作成します。これは、ドキュメントツリーに対する複雑な操作を行う場合など、ドキュメントの一部を保持するために使用できます。

QDomElement QDomDocument::createElement(const QString &tagName)

tagName という名前の新しい要素を作成します。この要素は、例えば `QDomNode::appendChild()` などを使用して DOM ツリーに挿入することができます。

tagName が有効な XML 名でない場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

createElementNS()、QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)

DOMツリーに挿入可能な、名前空間をサポートする新しい要素を作成します。要素の名前は `qName `、名前空間URIは `nsURI` です。また、この関数は `QDomNode::prefix()` および `QDomNode::localName()` を(`qName` に応じて)適切な値に設定します。

qName が空の文字列の場合、無効なデータポリシーが設定されているかどうかにかかわらず、null要素を返します。

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

QDomEntityReference QDomDocument::createEntityReference(const QString &name)

name という名前の新しいエンティティ参照を作成します。これは、例えばQDomNode::appendChild() などを使用して、ドキュメントに挿入することができます。

name が有効な XML 名でない場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomProcessingInstruction QDomDocument::createProcessingInstruction(const QString &target, const QString &data)

QDomNode::appendChild() などを使用して、ドキュメントに挿入可能な新しい処理命令を作成します。この関数は、処理命令のターゲットをtarget に、データをdata に設定します。

target が有効なXML名でない場合、またはdataに処理命令に含まれてはならない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy に従います。

QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomText QDomDocument::createTextNode(const QString &value)

文字列 `value ` に対応するテキストノードを作成します。このノードは、例えば `QDomNode::appendChild()` を使用して、ドキュメントツリーに挿入することができます。

value に、XML ドキュメントの文字データとして(文字参照の形式であっても)格納できない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy によって規定されます。

QDomNode::appendChild()、QDomNode::insertBefore()、およびQDomNode::insertAfter()も参照してください 。

QDomDocumentType QDomDocument::doctype() const

このドキュメントのドキュメントタイプを返します。

QDomElement QDomDocument::documentElement() const

ドキュメントのルート要素を返します。

QDomElement QDomDocument::elementById(const QString &elementId)

IDがelementId と等しい要素を返します。このIDを持つ要素が見つからなかった場合、この関数はnull element を返します。

QDomClasses は、どの属性が要素の ID であるかを認識していないため、この関数は常に `null element` を返します。これは将来のバージョンで変更される可能性があります。

QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const

tagname という名前のドキュメントに含まれるすべての要素を含むQDomNodeList を返します。ノードリストの順序は、要素ツリーのプレオーダー探索でノードが検出される順序となります。

elementsByTagNameNS() およびQDomElement::elementsByTagName()も参照してください 。

QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)

ローカル名localName 、名前空間 URInsURI を持つドキュメント内のすべての要素を含む `QDomNodeList ` を返します。ノードリストの順序は、要素ツリーのプレオーダー走査において要素が出現する順序となります。

elementsByTagName() およびQDomElement::elementsByTagNameNS()も参照してください 。

QDomImplementation QDomDocument::implementation() const

QDomImplementation オブジェクトを返します。

QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)

別のドキュメントから「importedNode 」というノードを、このドキュメントにインポートします。「importedNode 」は元のドキュメントに残ったままとなり、この関数はこのドキュメント内で使用できるコピーを作成します。

この関数は、このドキュメントに属するインポートされたノードを返します。返されるノードには親がありません。QDomDocument およびQDomDocumentType ノードをインポートすることはできません。そのような場合、この関数はnull node を返します。

importedNode がnull node である場合、nullノードが返されます。

deep がtrueの場合、この関数はノードimportedNode だけでなく、そのサブツリー全体をインポートします。falseの場合は、importedNode のみがインポートされます。引数deep は、QDomAttr およびQDomEntityReference ノードには影響しません。これは、QDomAttr ノードの子孫は常にインポートされ、QDomEntityReference ノードの子孫は決してインポートされないためです。

この関数の動作は、ノードの種類によって若干異なります:

ノードの種類動作
QDomAttr生成される属性において、所有者要素は 0 に設定され、指定されたフラグは true に設定されます。属性ノードの場合、importedNode のサブツリー全体が常にインポートされます。deep は効果を持ちません。
QDomDocumentドキュメントノードはインポートできません。
QDomDocumentFragmentdeep がtrueの場合、この関数はドキュメントフラグメント全体をインポートします。そうでない場合は、空のドキュメントフラグメントのみを生成します。
QDomDocumentTypeドキュメント・タイプ・ノードはインポートできません。
QDomElementQDomAttr::specified() が true の属性もインポートされますが、その他の属性はインポートされません。deep が true の場合、この関数はimportedNode のサブツリーもインポートします。そうでない場合は、要素ノード(および一部の属性、上記を参照)のみをインポートします。
QDomEntityエンティティノードはインポートできますが、DOMレベル2ではドキュメントタイプが読み取り専用であるため、現時点ではそれらを使用する方法はありません。
QDomEntityReferenceエンティティ参照ノードの子孫は決してインポートされません。deep は効果を持ちません。
QDomNotation表記ノードはインポートできますが、DOM レベル 2 ではドキュメントタイプは読み取り専用であるため、現時点ではそれらを使用する方法はありません。
QDomProcessingInstruction処理命令のターゲットと値は、新しいノードにコピーされます。
QDomTextテキストは新しいノードにコピーされます。
QDomCDATASectionテキストは新しいノードにコピーされます。
QDomCommentテキストは新しいノードにコピーされます。

QDomElement::setAttribute()、QDomNode::insertBefore()、QDomNode::insertAfter()、QDomNode::replaceChild()、QDomNode::removeChild()、およびQDomNode::appendChild()も参照してください 。

QDomNode::NodeType QDomDocument::nodeType() const

DocumentNode を返します。

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)

この関数は、バイト配列 `data`、文字列ビュー `text`、IO `device`、またはストリーム `reader ` から XML ドキュメントを解析し、それをドキュメントの内容として設定します。XML 仕様に従って、ドキュメントのエンコーディングを検出しようとします。解析結果を `ParseResult` に返しますが、これは明示的に `bool` に変換されます。

options パラメータを使用すると、名前空間処理の有効化など、さまざまな解析オプションを指定できます。

デフォルトでは、名前空間処理は無効になっています。無効になっている場合、パーサーはXMLファイルを読み込む際に名前空間処理を行いません。関数QDomNode::prefix()、QDomNode::localName()、およびQDomNode::namespaceURI()は、空の文字列を返します。

parseoptions を介して名前空間処理が有効になっている場合、パーサーはXMLファイル内の名前空間を認識し、プレフィックス名、ローカル名、および名前空間URIを適切な値に設定します。関数QDomNode::prefix()、QDomNode::localName()、およびQDomNode::namespaceURI()は、すべての要素および属性に対して文字列を返しますが、要素または属性にプレフィックスがない場合は空の文字列を返します。

空白のみで構成されるテキストノードは削除され、QDomDocument には表示されません。Qt 6.5以降では、QDomDocument::ParseOption::PreserveSpacingOnlyNodes を解析オプションとして指定することで、空白のみのテキストノードを保持するように指定できます。

エンティティ参照は次のように処理されます:

  • コンテンツ内に現れる内部一般エンティティおよび文字エンティティへの参照は含まれます。その結果、参照が対応するエンティティ値に置き換えられたQDomText ノードが生成されます。
  • 内部サブセット内に現れるパラメータエンティティへの参照は含められます。その結果、参照が対応するエンティティ値に置き換えられたエンティティおよび表記法宣言を含む `QDomDocumentType ` ノードが生成されます。
  • 内部サブセットで定義されておらず、かつコンテンツ内に現れる一般的な解析済みエンティティ参照は、QDomEntityReference ノードとして表現されます。
  • 内部サブセットで定義されておらず、コンテンツの外側に現れる解析済みエンティティ参照は、空の文字列に置き換えられます。
  • 解析されていないエンティティ参照は、空の文字列に置き換えられます。

注: IO `device ` を受け取るオーバーロードは 、それがまだ開かれていない場合、読み取り専用モードでそれを開こうとします。その場合、呼び出し元は `close` を呼び出す責任があります。これは Qt 7 で変更され、IO `device` は開かれなくなります。したがって、アプリケーションは `setContent()` を呼び出す前に、自身でデバイスを開く必要があります。

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

ParseResult およびParseOptionsも参照してください 。

QByteArray QDomDocument::toByteArray(int indent = 1) const

解析済みのドキュメントをテキスト形式に戻し、UTF-8でエンコードされたデータを含むQByteArray を返します。

この関数は、indent を子要素のインデント量として使用します。

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

QString QDomDocument::toString(int indent = 1) const

解析済みのドキュメントをテキスト形式に戻します。

この関数は、indent を子要素のインデント量として使用します。

indent が -1 の場合、空白は一切追加されません。

QDomDocument &QDomDocument::operator=(const QDomDocument &other)

このDOMドキュメントにother を割り当てます。

コピーされたデータは共有されます(浅いコピー):一方のノードを変更すると、もう一方も変更されます。深いコピーを作成したい場合は、cloneNode() を使用してください。

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