QDomDocument Class
QDomDocument クラスは XML ドキュメントを表します。詳細...
ヘッダ | #include <QDomDocument> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Xml) target_link_libraries(mytarget PRIVATE Qt6::Xml) |
qmake: | QT += xml |
継承: | QDomNode |
- 継承されたメンバを含むすべてのメンバのリスト
- 非推奨メンバー
- QDomDocumentはXMLクラスの一部です。
注意:このクラスの関数はすべてリエントラントです。
パブリック型
(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();
ドキュメント・オブジェクト・モデルの詳細については、ドキュメント・オブジェクト・モデル(DOM)レベル1およびレベル2コア仕様を参照してください。
DOMブックマーク・アプリケーションも参照してください 。
メンバ型ドキュメント
[since 6.5]
enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions
この enum は、setContent() メソッドを使用して XML ドキュメントをパースする際に使用可能なオプションについて説明します。
定数 | 値 | 説明 |
---|---|---|
QDomDocument::ParseOption::Default | 0x00 | 解析オプションは設定されていません。 |
QDomDocument::ParseOption::UseNamespaceProcessing | 0x01 | 名前空間処理が有効。 |
QDomDocument::ParseOption::PreserveSpacingOnlyNodes | 0x02 | スペーシング文字のみを含むテキストノードは保存されます。 |
この列挙型は 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 は元の文書に残りますが、この関数はこの文書内で使えるコピーを作成します。
この関数は、この文書に属するインポートされたノードを返す。返されたノードは親を持ちません。QDomDocument とQDomDocumentType ノードをインポートすることはできません。その場合、この関数はnull node を返します。
importedNode がnull node の場合は null ノードが返されます。
deep が真の場合、この関数はノードimportedNode だけでなく、そのサブツリー全体をインポートします。importedNode が偽の場合、 だけがインポートされます。QDomAttr ノードの子孫は常にインポートされ、QDomEntityReference ノードの子孫は決してインポートされないので、引数deep はQDomAttr とQDomEntityReference ノードには影響しない。
この関数の動作は、ノードのタイプによって若干異なります:
ノードタイプ | 動作 |
---|---|
QDomAttr | 所有者要素に 0 が設定され、生成された属性に指定されたフラグが true に設定される。属性ノードでは常にimportedNode のサブツリー全体がインポートされます:deep は影響しません。 |
QDomDocument | 文書ノードはインポートできません。 |
QDomDocumentFragment | deep がtrueの場合、この関数は文書断片全体をインポートします。そうでない場合、空の文書断片のみを生成します。 |
QDomDocumentType | それ以外の場合は、空の文書片を生成するだけです。 |
QDomElement | QDomAttr::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() を使用してください。
© 2025 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.