변경 사항 Qt XML

Qt 6는 프레임워크를 보다 효율적이고 사용하기 쉽게 만들기 위한 의식적인 노력의 결과입니다.

각 릴리스에서 모든 공개 API에 대해 바이너리 및 소스 호환성을 유지하려고 노력합니다. 하지만 Qt를 더 나은 프레임워크로 만들기 위해 몇 가지 변경이 불가피했습니다.

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

SAX(Simple API for XML) 파서

모든 SAX 클래스는 Qt XML 에서 제거되었습니다. 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 클래스가 제거되었으므로 QDomDocumentQXmlStreamReader 을 사용하여 다시 구현되었습니다. 이로 인해 몇 가지 동작이 변경되었습니다:

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

QDomDocument 을 사용하고 이러한 접두사를 사용하는 경우 코드와 XML 문서를 적절히 업데이트해야 합니다.

공백 전용 텍스트 노드

기본적으로 띄어쓰기 문자만 포함된 텍스트 노드는 제거되어 QDomDocument 에 나타나지 않습니다. 이 동작을 변경하는 Qt 5의 방법은 QDomDocument::setContent() 오버로드를 사용하여 QXmlReader 을 제공할 수 있도록 하는 것이었습니다. 이 오버로드는 Qt 6.0에서 제거되었지만, Qt 6.5부터는 QDomDocument::ParseOption::PreserveSpacingOnlyNodes 을 구문 분석 옵션으로 전달하여 띄어쓰기 전용 텍스트 노드를 보존하도록 지정할 수 있습니다.

Qt Core5 호환 라이브러리

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

QT += core5compat

애플리케이션이나 라이브러리를 이미 cmake 빌드 시스템으로 포팅한 경우 CMakeList.txt 에 다음을 추가합니다:

PUBLIC_LIBRARIES
    Qt::Core5Compat

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