QXmlSimpleReader Class
QXmlSimpleReader 클래스는 간단한 XML 파서 구현을 제공합니다. 더 보기...
Header: | #include <QXmlSimpleReader> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
qmake: | QT += core5compat |
상속합니다: | QXmlReader |
경고: 이 클래스는 재진입할 수 없습니다.
공용 함수
QXmlSimpleReader() | |
virtual | ~QXmlSimpleReader() |
virtual bool | parse(const QXmlInputSource *input, bool incremental) |
virtual bool | parseContinue() |
재구현된 공용 함수
virtual QXmlDTDHandler * | DTDHandler() const override |
virtual QXmlContentHandler * | contentHandler() const override |
virtual QXmlDeclHandler * | declHandler() const override |
virtual QXmlEntityResolver * | entityResolver() const override |
virtual QXmlErrorHandler * | errorHandler() const override |
virtual bool | feature(const QString &name, bool *ok = nullptr) const override |
virtual bool | hasFeature(const QString &name) const override |
virtual bool | hasProperty(const QString &name) const override |
virtual QXmlLexicalHandler * | lexicalHandler() const override |
virtual bool | parse(const QXmlInputSource &input) override |
virtual bool | parse(const QXmlInputSource *input) override |
virtual void * | property(const QString &name, bool *ok = nullptr) const override |
virtual void | setContentHandler(QXmlContentHandler *handler) override |
virtual void | setDTDHandler(QXmlDTDHandler *handler) override |
virtual void | setDeclHandler(QXmlDeclHandler *handler) override |
virtual void | setEntityResolver(QXmlEntityResolver *handler) override |
virtual void | setErrorHandler(QXmlErrorHandler *handler) override |
virtual void | setFeature(const QString &name, bool enable) override |
virtual void | setLexicalHandler(QXmlLexicalHandler *handler) override |
virtual void | setProperty(const QString &name, void *value) override |
상세 설명
이 XML 리더는 다양한 애플리케이션에 적합합니다. 잘 형식화된 XML을 구문 분석할 수 있고 요소의 네임스페이스를 콘텐츠 핸들러에 보고할 수 있지만, 외부 엔티티는 구문 분석하지 않습니다. 역사적인 이유로 XML 1.0 사양에 설명된 속성 값 정규화 및 줄 끝 처리는 수행되지 않습니다.
이 클래스의 가장 쉬운 사용 패턴은 리더 인스턴스를 생성하고, 입력 소스를 정의하고, 리더에서 사용할 핸들러를 지정하고, 데이터를 구문 분석하는 것입니다.
예를 들어 QFile 을 사용하여 입력을 제공할 수 있습니다. 여기서는 리더를 생성하고 리더에서 사용할 입력 소스를 정의합니다:
QXmlSimpleReader xmlReader; QXmlInputSource *source = new QXmlInputSource(file);
핸들러를 사용하면 리더가 특정 유형의 콘텐츠를 발견하거나 입력에서 오류가 발견될 때 작업을 수행할 수 있습니다. 리더는 각 이벤트 유형에 대해 어떤 핸들러를 사용할지 알려주어야 합니다. 많은 일반적인 애플리케이션의 경우 QXmlDefaultHandler 을 서브클래싱하여 사용자 정의 핸들러를 만들고 이를 사용하여 오류 및 콘텐츠 이벤트를 모두 처리할 수 있습니다:
Handler *handler = new Handler; xmlReader.setContentHandler(handler); xmlReader.setErrorHandler(handler);
최소한 콘텐츠 및 오류 핸들러를 설정하지 않으면 구문 분석기는 기본 동작으로 돌아가서 아무 일도 하지 않습니다.
입력을 처리하는 가장 편리한 방법은 입력 소스를 지정하는 인수와 함께 parse() 함수를 사용하여 한 번에 입력을 읽는 것입니다:
bool ok = xmlReader.parse(source); if (!ok) std::cout << "Parsing failed." << std::endl;
전체 입력을 한 번에 구문 분석할 수 없는 경우(예: 크기가 크거나 네트워크 연결을 통해 전달되는 경우) 데이터를 조각으로 나누어 구문 분석기에 공급할 수 있습니다. 이는 parse()에 점진적으로 작업하도록 지시하고 모든 데이터가 처리될 때까지 parseContinue() 함수를 계속 호출함으로써 이루어집니다.
증분 구문 분석을 수행하는 일반적인 방법은 network reply 의 readyRead()
신호를 슬롯에 연결하고 거기서 들어오는 데이터를 처리하는 것입니다. QNetworkAccessManager 을 참조하세요.
구문 분석 동작의 측면은 setFeature() 및 setProperty()을 사용하여 조정할 수 있습니다.
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
QXmlSimpleReader는 재진입하지 않습니다. 스레드 코드에서 이 클래스를 사용하려면 QMutex 와 같은 잠금 메커니즘을 사용하여 QXmlSimpleReader를 사용하여 코드를 잠급니다.
이 클래스는 이제 더 이상 사용되지 않으므로 XML 파일을 읽으려면 QXmlStreamReader 또는 QDomDocument를 사용하세요.
멤버 함수 문서
QXmlSimpleReader::QXmlSimpleReader()
간단한 XML 리더를 구축합니다.
[virtual noexcept]
QXmlSimpleReader::~QXmlSimpleReader()
단순 XML 리더를 삭제합니다.
[override virtual]
QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
재구현합니다: QXmlReader::DTDHandler() const.
setDTDHandler()도 참조하세요 .
[override virtual]
QXmlContentHandler *QXmlSimpleReader::contentHandler() const
재구현합니다: QXmlReader::contentHandler() const.
setContentHandler()도 참조하십시오 .
[override virtual]
QXmlDeclHandler *QXmlSimpleReader::declHandler() const
재구현합니다: QXmlReader::declHandler() const.
setDeclHandler()도 참조하십시오 .
[override virtual]
QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
재구현합니다: QXmlReader::entityResolver() const.
setEntityResolver()도 참조하십시오 .
[override virtual]
QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
재구현합니다: QXmlReader::errorHandler() const.
setErrorHandler()도 참조하십시오 .
[override virtual]
bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
재구현합니다: QXmlReader::feature(const QString &name, bool *ok) const.
setFeature()도 참조하십시오 .
[override virtual]
bool QXmlSimpleReader::hasFeature(const QString &name) const
재구현합니다: QXmlReader::hasFeature(const QString &name) const.
[override virtual]
bool QXmlSimpleReader::hasProperty(const QString &name) const
재구현합니다: QXmlReader::hasProperty(const QString &name) const.
[override virtual]
QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
재구현합니다: QXmlReader::lexicalHandler() const.
setLexicalHandler()도 참조하십시오 .
[override virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource &input)
재구현합니다: QXmlReader::parse(const QXmlInputSource &input).
[override virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource *input)
재구현합니다: QXmlReader::parse(const QXmlInputSource *input).
input 에서 XML 문서를 읽고 한 번에 구문 분석합니다(비증분). 구문 분석에 성공하면 true
을 반환하고, 그렇지 않으면 false
을 반환합니다.
[virtual]
bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
input 에서 XML 문서를 읽고 구문 분석합니다. 구문 분석이 성공적으로 완료되면 true
을 반환하고, 그렇지 않으면 오류가 발생했음을 나타내는 false
을 반환합니다.
incremental 이 거짓이면 XML 파일을 완전히 읽지 못한 경우 이 함수는 거짓을 반환합니다. 이 경우 구문 분석을 계속할 수 없습니다.
incremental 이 참이면 구문 분석기는 XML 파일의 끝에 도달하기 전에 input 의 끝에 도달해도 false를 반환하지 않습니다. 대신 구문 분석기의 상태를 저장하여 나중에 더 많은 데이터를 사용할 수 있을 때 구문 분석을 계속할 수 있도록 합니다. 이러한 경우 parseContinue() 함수를 사용하여 구문 분석을 계속할 수 있습니다. 이 클래스는 입력 소스 input 에 대한 포인터를 저장하고 parseContinue() 함수는 해당 입력 소스에서 읽기를 시도합니다. 따라서 parseContinue() 함수를 더 이상 호출할 필요가 없을 때까지 입력 소스 input 를 삭제해서는 안 됩니다.
증분 구문 분석이 진행 중일 때 incremental 이 참으로 설정된 상태에서 이 함수를 호출하면 새 구문 분석 세션이 시작되고 이전 세션은 손실됩니다.
parseContinue() 및 QTcpSocket도 참조하세요 .
[virtual]
bool QXmlSimpleReader::parseContinue()
가장 최근에 parse()를 호출하여 지정한 QXmlInputSource 에서 입력을 받아 증분 구문 분석을 계속합니다. 이 함수를 사용하려면 증분 인수를 true로 설정하여 parse()를 호출해야 합니다.
구문 분석 오류가 발생하면 false
을 반환하고, 그렇지 않으면 XML 파일의 끝에 도달하지 않았더라도 true
을 반환합니다. 나중에 구문 분석할 데이터가 더 있으면 이 함수를 다시 호출하여 구문 분석을 계속할 수 있습니다.
입력 소스에서 사용할 수 있는 데이터가 없을 때 이 함수를 호출하면 판독기에 XML 파일의 끝에 도달했음을 나타냅니다. 이 시점까지 제공된 입력이 제대로 형식화되지 않은 경우 구문 분석 오류가 발생하고 false가 반환됩니다. 제공된 입력이 올바른 형식이면 true가 반환됩니다. 이 방식으로 입력을 종료하는 것이 중요한 이유는 다른 XML 파일을 구문 분석하는 데 리더를 재사용할 수 있기 때문입니다.
파일 끝에 도달했지만 사용 가능한 데이터가 없는 상태에서 이 함수를 호출하면 이전 입력이 잘 형식화되었는지 여부에 관계없이 false가 반환됩니다.
parse(), QXmlInputSource::data() 및 QXmlInputSource::next()도 참조하세요 .
[override virtual]
void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
재구현합니다: QXmlReader::property(const QString &name, bool *ok) const.
setProperty()도 참조하십시오 .
[override virtual]
void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
재구현합니다: QXmlReader::setContentHandler(QXmlContentHandler *핸들러).
contentHandler()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
재구현합니다: QXmlReader::setDTDHandler(QXmlDTDHandler *핸들러).
[override virtual]
void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
다시 구현합니다: QXmlReader::setDeclHandler(QXmlDeclHandler *핸들러).
declHandler()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
재구현합니다: QXmlReader::setEntityResolver(QXmlEntityResolver *핸들러).
entityResolver()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
재구현합니다: QXmlReader::setErrorHandler(QXmlErrorHandler *핸들러).
errorHandler()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setFeature(const QString &name, bool enable)
재구현합니다: QXmlReader::setFeature(const QString &name, bool 값).
enable 이 참이면 name 기능을 켜고, 그렇지 않으면 끕니다.
name 매개변수는 다음 문자열 중 하나여야 합니다:
기능 | 기본값 | 참고 |
---|---|---|
http://xml.org/sax/features/namespaces | true | 활성화하면 네임스페이스가 콘텐츠 핸들러에 보고됩니다. |
http://xml.org/sax/features/namespace-prefixes | false | 활성화하면 네임스페이스 선언에 사용된 원래 접두사가 붙은 이름과 속성이 보고됩니다. |
http://qt-project.org/xml/features/report-whitespace-only-CharData | true | 활성화하면 공백 문자로만 구성된 CharData가 QXmlContentHandler::characters()를 사용하여 보고됩니다. 비활성화하면 공백이 자동으로 삭제됩니다. |
http://qt-project.org/xml/features/report-start-end-entity | false | 활성화하면 구문 분석기가 QXmlContentHandler::startEntity() 및 QXmlContentHandler::endEntity() 이벤트를 보고하므로 문자 데이터가 청크 단위로 보고될 수 있습니다. 비활성화하면 구문 분석기는 이러한 이벤트를 보고하지 않고 엔티티를 자동으로 대체하고 문자 데이터를 하나의 청크로 보고합니다. |
feature() 및 hasFeature()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
재구현합니다: QXmlReader::setLexicalHandler(QXmlLexicalHandler *핸들러).
lexicalHandler()도 참조하세요 .
[override virtual]
void QXmlSimpleReader::setProperty(const QString &name, void *value)
재구현합니다: QXmlReader::setProperty(const QString &name, void *value).
property()도 참조하세요 .
© 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.