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)에 대한 자세한 내용은 문서 객체 모델(DOM) 레벨 1 및 레벨 2 핵심 사양을 참조하십시오.
DOM 북마크 애플리케이션항목도 참조하십시오 .
멤버 유형 문서
[since 6.5] enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions
이 열거형은 ` setContent()` 메서드를 사용하여 XML 문서를 파싱할 때 사용할 수 있는 가능한 옵션을 설명합니다.
| 상수 | 값 | 상수값 |
|---|---|---|
QDomDocument::ParseOption::Default | 0x00 | 구문 분석 옵션이 설정되어 있지 않습니다. |
QDomDocument::ParseOption::UseNamespaceProcessing | 0x01 | 네임스페이스 처리가 활성화됩니다. |
QDomDocument::ParseOption::PreserveSpacingOnlyNodes | 0x02 | 공백 문자만 포함된 텍스트 노드는 유지됩니다. |
이 열거형은 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)
DOM 트리에 삽입할 수 있는 ‘ tagName ’라는 새 요소를 생성합니다(예: QDomNode::appendChild()을 사용하여).
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`를 반환합니다. 노드 목록의 순서는 요소 트리를 선순회(preorder)로 탐색할 때 노드가 나타나는 순서입니다.
elementsByTagNameNS() 및 QDomElement::elementsByTagName()도 참조하십시오 .
QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)
문서 내에서 로컬 이름이 localName 이고 네임스페이스 URI가 nsURI 인 모든 요소를 포함하는 QDomNodeList 객체를 반환합니다. 노드 목록의 순서는 요소 트리를 선순회(preorder) 방식으로 탐색할 때 발견되는 순서입니다.
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 | 생성된 속성에서 소유자 요소(owner element)는 0으로 설정되고, 지정된 플래그는 true로 설정됩니다. 속성 노드의 경우 importedNode 의 전체 하위 트리가 항상 가져오기 대상에 포함되며, deep 는 아무런 영향을 미치지 않습니다. |
| QDomDocument | 문서 노드는 가져올 수 없습니다. |
| QDomDocumentFragment | deep 가 true인 경우, 이 함수는 문서 조각 전체를 가져오며, 그렇지 않은 경우 빈 문서 조각만 생성합니다. |
| QDomDocumentType | 문서 유형 노드는 가져올 수 없습니다. |
| QDomElement | QDomAttr::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() 함수는 빈 문자열을 반환합니다.
parse options 를 통해 네임스페이스 처리가 활성화된 경우, 파서는 XML 파일 내의 네임스페이스를 인식하고 접두사 이름, 로컬 이름 및 네임스페이스 URI를 적절한 값으로 설정합니다. QDomNode::prefix(), QDomNode::localName() 및 QDomNode::namespaceURI() 함수는 모든 요소와 속성에 대해 문자열을 반환하며, 요소나 속성에 접두사가 없는 경우 빈 문자열을 반환합니다.
공백으로만 구성된 텍스트 노드는 제거되며, ` QDomDocument`에 나타나지 않습니다. Qt 6.5부터는 ` QDomDocument::ParseOption::PreserveSpacingOnlyNodes `를 구문 분석 옵션으로 전달하여, 공백으로만 구성된 텍스트 노드를 보존하도록 지정할 수 있습니다.
엔티티 참조는 다음과 같이 처리됩니다:
- 콘텐츠에 나타나는 내부 일반 엔티티 및 문자 엔티티에 대한 참조는 포함됩니다. 그 결과, 참조가 해당 엔티티 값으로 대체된 ` QDomText ` 노드가 생성됩니다.
- 내부 하위 집합에 나타나는 매개변수 엔티티에 대한 참조는 포함됩니다. 그 결과, 참조가 해당 엔티티 값으로 대체된 엔티티 및 표기법 선언을 포함하는 ` QDomDocumentType ` 노드가 생성됩니다.
- 내부 하위 집합에 정의되어 있지 않고 콘텐츠 내에 나타나는 일반 구문 분석된 엔티티 참조는 QDomEntityReference 노드로 표현됩니다.
- 내부 하위 집합에 정의되어 있지 않고 콘텐츠 외부에 나타나는 모든 구문 분석된 엔티티 참조는 빈 문자열로 대체됩니다.
- 구문 분석되지 않은 엔티티 참조는 모두 빈 문자열로 대체됩니다.
참고: IO ` device `를 인수로 받는오버로드 함수는 , 해당 엔티티 참조가 아직 열려 있지 않은 경우 읽기 전용 모드로 열려고 시도합니다. 이 경우, 호출자는 `close`를 호출할 책임이 있습니다. 이는 Qt 7에서 변경될 예정이며, 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.