QXmlInputSource Class
QXmlInputSource 类为QXmlReader 的子类提供输入数据。更多内容...
| 头文件: | #include <QXmlInputSource> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake: | QT += core5compat |
注意:该类中的所有函数均为可重入函数。
公共函数
| QXmlInputSource() | |
| QXmlInputSource(QIODevice *dev) | |
| virtual | ~QXmlInputSource() |
| virtual QString | data() const |
| virtual void | fetchData() |
| virtual QChar | next() |
| virtual void | reset() |
| virtual void | setData(const QString &dat) |
| virtual void | setData(const QByteArray &dat) |
受保护函数
| virtual QString | fromRawData(const QByteArray &data, bool beginning = false) |
详细说明
QXmlReader 的所有子类都会从该类读取输入的 XML 文档。
如果找到编码声明,该类会读取 XML 文件中的编码声明,并使用相应的编码读取数据,从而识别数据的编码。如果找不到编码声明,则根据是否找到字节顺序标记,假定数据为 UTF-8 或 UTF-16。
有两种方法可以向输入源填充数据:你可以使用QIODevice*来构造它,这样输入源就会从该设备读取数据;或者你可以使用setData()函数之一显式设置数据。
通常,您要么构建一个基于 `QIODevice*` 的 `QXmlInputSource`,要么构建一个空的 `QXmlInputSource` 并使用 `setData()` 设置数据。只有极少数情况下,您才需要混合使用这两种方法。
QXmlReader 的子类使用next()函数逐个字符地读取输入。若需从头开始读取,请使用reset()。
若您希望对数据进行除解析以外的其他操作(例如显示原始 XML 文件),data() 和fetchData() 函数将非常有用。在此类情况下使用 QXmlInputClass 的优势在于,它会尝试使用正确的编码。
另请参阅 QXmlReader 和QXmlSimpleReader 。
成员函数文档
QXmlInputSource::QXmlInputSource()
构建一个不包含任何数据的输入源。
另请参阅 setData()。
[explicit] QXmlInputSource::QXmlInputSource(QIODevice *dev)
构建一个输入源,并从设备dev 获取数据。如果dev 尚未打开,则以只读模式打开该文件。如果dev 为 0 或无法从设备读取数据,则该输入源将不包含任何数据。
另请参阅 setData()、fetchData() 和QIODevice 。
[virtual noexcept] QXmlInputSource::~QXmlInputSource()
析构函数。
[virtual] QString QXmlInputSource::data() const
返回输入源中包含的数据;如果输入源不包含任何数据,则返回空字符串。
另请参阅 setData()、QXmlInputSource() 和fetchData()。
[virtual] void QXmlInputSource::fetchData()
该函数从构造时设置的设备中读取更多数据。如果输入源中已经包含数据,该函数会先删除这些数据。
如果该对象在构造时未指定要读取数据的设备,或者该函数无法从设备获取更多数据,则调用此函数后,该对象将不包含任何数据。
有两种情况会由其他函数调用隐式地执行数据获取:在创建对象时(以便对象在有可用数据时初始化一些数据),以及在调用 `next()` 时(如果数据已用完)。
如果您使用next(),通常无需使用此函数。
另请参阅 data()、next() 和QXmlInputSource()。
[virtual protected] QString QXmlInputSource::fromRawData(const QByteArray &data, bool beginning = false)
该函数从data 读取XML文件,并尝试识别其编码。它将原始数据data 转换为QString ,并返回该结果。它会尽最大努力为XML文件获取正确的编码。
如果beginning 为 true,则该函数会假定数据位于新 XML 文档的开头,并查找编码声明;如果beginning 为 false,则使用从先前调用中确定的编码对原始数据进行转换。
[virtual] QChar QXmlInputSource::next()
返回输入源中的下一个字符。如果该函数到达可用数据的末尾,则返回 QXmlInputSource::EndOfData。如果在此之后调用 next(),它将通过调用fetchData() 尝试获取更多数据。 如果调用 `fetchData()` 返回了新数据,则本函数返回该数据的首个字符;否则,返回 `QXmlInputSource::EndOfDocument`。
诸如QXmlSimpleReader 之类的读取器会假设,如果该函数返回 QXmlInputSource::EndOfDocument,则表示已到达 XML 文档的末尾,并会检查所提供的输入是否格式正确。因此,在重写此函数时,务必确保复制此行为。
另请参阅 reset()、fetchData()、QXmlSimpleReader::parse() 以及QXmlSimpleReader::parseContinue()。
[virtual] void QXmlInputSource::reset()
该函数将next()所使用的位置设置为data()返回的数据开头。如果您希望将该输入源用于多次解析,此功能将非常有用。
注意:如果 底层数据源是QIODevice ,则 设备中的当前位置不会自动设置为输入的开头。请在设备上调用QIODevice::seek(0) 来实现这一点。
另请参阅 next()。
[virtual] void QXmlInputSource::setData(const QString &dat)
将输入源的数据设置为dat 。
如果输入源中已包含数据,则该函数会先删除这些数据。
另请参阅 data()。
[virtual] void QXmlInputSource::setData(const QByteArray &dat)
数据dat 在被赋值之前,已通过正确的文本编解码器进行处理。
这是一个重载函数。
© 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.