QDomDocument Class
QDomDocument 클래스는 XML 문서를 나타냅니다. 더 보기...
Header: | #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 클래스의 기본 생성자를 사용하면 문서에 조작하거나 삽입할 수 없는 빈 객체만 생성됩니다.
예를 들어 createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() 및 createEntityReference() 등의 문서 데이터 생성을 위한 여러 함수가 QDomDocument 클래스에 있습니다. 이러한 함수 중 일부는 네임스페이스를 지원하는 버전이 있습니다(예: 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]
열거형 클래스 QDomDocument::ParseOption
플래그 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()도 참조하십시오 .
멤버 함수 문서
[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() 함수는 빈 문자열을 반환합니다.
구문 분석 options 을 통해 네임스페이스 처리가 활성화된 경우 구문 분석기는 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 을참조하십시오 .
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)
문서 트리에 삽입할 수 있는 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 를 반환합니다.
이 함수는 어떤 속성이 요소 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 이고 네임스페이스 URI가 nsURI 인 문서의 모든 요소를 포함하는 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 노드만 가져옵니다. 인자 deep 는 QDomAttr 노드의 하위 트리는 항상 가져오고 QDomEntityReference 노드의 하위 트리는 가져오지 않으므로 QDomAttr 및 QDomEntityReference 노드에는 영향을 미치지 않습니다.
이 함수의 동작은 노드 유형에 따라 약간 다릅니다:
노드 유형 | 동작 |
---|---|
QDomAttr | 소유자 요소는 0으로 설정되고 생성된 속성에서 지정된 플래그가 true로 설정됩니다. 속성 노드에는 항상 importedNode 의 전체 하위 트리를 가져옵니다. deep 은 효과가 없습니다. |
QDomDocument | 문서 노드는 가져올 수 없습니다. |
QDomDocumentFragment | deep 이 참이면 이 함수는 전체 문서 조각을 가져오며, 그렇지 않으면 빈 문서 조각만 생성합니다. |
QDomDocumentType | 문서 유형 노드는 가져올 수 없습니다. |
QDomElement | QDomAttr::specified()가 참인 속성도 가져오며 다른 속성은 가져오지 않습니다. 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.