QDomDocument Class

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

Header: #include <QDomDocument>
CMake: find_package(Qt6 REQUIRED COMPONENTS Xml)
target_link_libraries(mytarget PRIVATE Qt6::Xml)
qmake: QT += xml
Inherits: 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、QDomElementQDomText です。

パースされた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);

docelem がスコープ外に出ると、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();

ドキュメント・オブジェクト・モデルの詳細については、ドキュメント・オブジェクト・モデル(DOM)レベル1およびレベル2コア仕様を参照してください。

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

メンバ型ドキュメント

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

この enum は、setContent() メソッドを使用して XML ドキュメントをパースする際に使用可能なオプションについて説明します。

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

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

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

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

メンバ関数ドキュメント

[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 、 IOdevice 、またはストリームreader から XML ドキュメントを解析し、ドキュメントのコンテンツとして設定します。XML仕様に従って、ドキュメントのエンコーディングを検出しようとする。bool に明示的に変換したParseResult の解析結果を返す。

options パラメータを使用して、たとえば名前空間処理を有効にするなど、さまざまな構文解析オプションを指定することができます。

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

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

QDomDocumentQt 6.5 以降では、QDomDocument::ParseOption::PreserveSpacingOnlyNodes を解析オプションとして渡すことで、空白のみのテキストノードを保存するように指定できます。

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

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

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

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

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

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)

QDomElement::setAttributeNode() などを使用して要素に挿入できる、name という新しい属性を作成します。

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)

QDomNode::appendChild() などを使用してドキュメントに挿入できる、文字列value の新しい CDATA セクションを作成します。

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

QDomNode::appendChild()、QDomNode::insertBefore()、QDomNode::insertAfter()も参照

QDomComment QDomDocument::createComment(const QString &value)

QDomNode::appendChild() などを使って文書に挿入できる、文字列value に対する新しいコメントを作成する。

value に XML コメントに格納できない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy に従う。

QDomNode::appendChild()、QDomNode::insertBefore()、QDomNode::insertAfter()も参照

QDomDocumentFragment QDomDocument::createDocumentFragment()

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

QDomElement QDomDocument::createElement(const QString &tagName)

QDomNode::appendChild() などを使用して DOM ツリーに挿入できる、tagName という新しい要素を作成します。

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)

QDomNode::appendChild() などを使用してドキュメントに挿入できる、name という新しい実体参照を作成します。

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 名でない場合、またはデータに処理命令で使用できない文字が含まれている場合、この関数の動作はQDomImplementation::InvalidDataPolicy に従います。

QDomNode::appendChild()、QDomNode::insertBefore()、QDomNode::insertAfter()も参照

QDomText QDomDocument::createTextNode(const QString &value)

QDomNode::appendChild() などを使用して、文書ツリーに挿入できる文字列value のテキスト・ノードを作成します。

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 というローカル名とnsURI という名前空間 URI を持つドキュメントに含まれるすべての要素を含むQDomNodeList を返します。 ノードリストの順番は、要素ツリーのプレオーダートラバーサルで見つかる順番です。

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

QDomImplementation QDomDocument::implementation() const

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

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

importedNode ノードを別の文書からこの文書にインポートします。importedNode は元の文書に残りますが、この関数はこの文書内で使用できるコピーを作成します。

この関数は、この文書に属するインポートされたノードを返します。返されたノードは親を持ちません。QDomDocumentQDomDocumentType ノードをインポートすることはできません。その場合、この関数はnull node を返します。

importedNodenull node の場合、null ノードが返されます。

deep が真の場合、この関数はノードimportedNode だけでなく、そのサブツリー全体をインポートします。importedNode が偽の場合、 だけがインポートされます。QDomAttr ノードの子孫は常にインポートされ、QDomEntityReference ノードの子孫は決してインポートされないので、引数deepQDomAttrQDomEntityReference ノードには影響しない。

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

ノードタイプ動作
QDomAttr所有者要素は 0 に設定され、生成された属性に指定されたフラグが true に設定される。属性ノードでは常にimportedNode のサブツリー全体がインポートされます:deep は影響しません。
QDomDocument文書ノードはインポートできません。
QDomDocumentFragmentdeep がtrueの場合、この関数は文書断片全体をインポートします。そうでない場合、空の文書断片のみを生成します。
QDomDocumentTypeそれ以外の場合は、空の文書片を生成するだけです。
QDomElementQDomAttr::specified() が true の属性も取 り 込まれますが、 それ以外の属性は取 り 込まれません。deep が真の場合、この関数は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 を返します。

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() を使用してください。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。