이 페이지에서

변경 사항 Qt XML

Qt 6의 변경 사항은 프레임워크를 더 효율적이고 사용하기 쉽게 만들기 위한 의도적인 노력의 결과입니다.

저희는 각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하기 위해 노력하고 있습니다. 하지만 Qt를 더 나은 프레임워크로 만들고 최신 표준에 부합시키기 위한 노력의 일환으로 일부 변경 사항은 불가피했습니다.

Qt 6은 Qt 5보다 XML 1.0 규칙을 더 엄격하게 적용합니다. Qt 5에서는 XML 파서가 더 관대하여 XML 1.0 사양을 준수하지 않는 특정 구문을 허용했습니다. Qt 6은 이러한 동작을 수정하여 XML 처리가 표준을 올바르게 따르도록 보장합니다. 애플리케이션이 Qt 5에서 부적절하게 허용되었던 동작에 의존하고 있는 경우, 이에 따라 XML 문서나 처리 로직을 조정해야 할 수 있습니다.

XML 1.0 규칙에 대한 자세한 내용은 공식 W3C XML 사양인 ‘확장 가능한 마크업 언어(XML) 1.0(제5판)’을 참조하십시오.

이 주제에서는 Qt XML 의 변경 사항을 요약하고, 이를 처리하기 위한 지침을 제공합니다.

Simple API for XML(SAX) 파서

Qt XML 에서 모든 SAX 클래스가 제거되었습니다. XML 파일을 읽으려면 QXmlStreamReader 를 사용하십시오. 현재 코드를 QXmlStreamReader 로 이식하기 위한 간단한 단계는 다음과 같습니다:

예를 들어, 다음과 같은 코드가 있다면

QFile *file = new QFile(...);
QXmlInputSource *source = new QXmlInputSource(file);

Handler *handler = new Handler;

QXmlSimpleReader xmlReader;
xmlReader.setErrorHandler(handler);
xmlReader.setContentHandler(handler);

if (xmlReader.parse(source)) {
    ... // do processing
} else {
    ... // do error handling
}

다음과 같이 재작성할 수 있습니다.

QFile file = ...;
QXmlStreamReader reader(&file);

while (!reader.atEnd()) {
    reader.readNext();
    ... // do processing
}
if (reader.hasError()) {
    ... // do error handling
}

QDom 및 QDomDocument

Qt XML 에서 SAX 클래스가 제거됨에 따라, QDomDocument 는 QXmlStreamReader 를 사용하여 재구현되었습니다. 이로 인해 몇 가지 동작상의 변화가 발생합니다:

  • 속성 값이 정규화됩니다. 예를 들어, ` <tag attr=" a \n b " /> `는 ` <tag attr="a b"/>`와 동일합니다.
  • 동일한 정규화된 속성 이름은 더 이상 허용되지 않습니다. 즉, 요소의 속성 이름은 고유해야 합니다.
  • 선언되지 않은 네임스페이스 접두사는 더 이상 허용되지 않습니다.

자세한 내용은 다음을 참조하십시오: XML 1.0의 속성-값 정규화

제어 문자

Qt 6에서는 U+0000—U+001F, U+007F 및 U+0080—U+009F와 같은 제어 문자가 XML 1.0 규칙에 따라 이제 올바르게 거부됩니다. Qt 5에서는 이러한 문자가 잘못 허용되었습니다. Qt 6에서 XML을 사용하기 전에, XML 문서에 유효한 XML 1.0 준수 문자만 포함되어 있는지 확인하십시오. 제어 문자가 필요한 경우, 텍스트 안전(text-safe) 형식을 사용하여 인코딩하십시오.

자세한 내용은 다음을 참조하십시오: XML 1.0의 문자

XML 내의 HTML 엔티티

Qt 6에서는 문서 유형 정의(DTD)에 명시적으로 선언되지 않은 HTML 엔티티는 더 이상 유효하지 않습니다. Qt 5에서는 선언이 없더라도 특정 HTML 전용 엔티티(예: &nbsp;)가 허용되었습니다. Qt 6에서 호환성을 보장하려면 숫자 문자 참조를 사용하거나, 필요한 엔티티를 DTD에 정의하거나, 콘텐츠가 HTML 엔티티에 의존하는 경우 XML을 HTML로 처리하십시오.

자세한 내용은 다음을 참조하십시오: XML 1.0의 엔티티 내 문자 인코딩

공백만 포함된 텍스트 노드

기본적으로 공백 문자만 포함된 텍스트 노드는 제거되며 QDomDocument 에 나타나지 않습니다. Qt 5에서는 QDomDocument::setContent() 오버로드를 사용하여 이 동작을 변경할 수 있었으며, 이때 QXmlReader 를 전달할 수 있었습니다. 이 오버로드는 Qt 6.0에서 제거되었으나, Qt 6.5부터는 ` QDomDocument::ParseOption::PreserveSpacingOnlyNodes `를 파싱 옵션으로 전달하여 공백만 포함된 텍스트 노드를 반드시 보존하도록 지정할 수 있습니다.

QDomDocument 를 사용하고 이 중 하나에 의존하고 있다면, 코드와 XML 문서를 그에 맞게 업데이트해야 합니다.

Qt Core5 호환성 라이브러리

현재 애플리케이션이나 라이브러리를 바로 이식할 수 없는 경우, 기존 코드베이스의 작동을 유지하기 위해 Qt5Compat에 QXmlSimpleReader 및 관련 클래스가 여전히 존재합니다. 이러한 SAX 클래스를 계속 사용하려면 새로운 Qt5Compat 모듈을 링크하고 qmake .pro 파일에 다음 줄을 추가해야 합니다:

QT += core5compat

이미 애플리케이션이나 라이브러리를 CMake 빌드 시스템으로 이식한 경우, CMakeList.txt 파일에 다음 내용을 추가하십시오:

PUBLIC_LIBRARIES
    Qt::Core5Compat

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