QXmlInputSource Class

QXmlInputSource 类为QXmlReader 子类提供输入数据。更多

Header: #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 的好处是,它会尝试使用正确的编码。

另请参阅 QXmlReaderQXmlSimpleReader

成员函数文档

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 为假,它将使用先前调用确定的编码转换原始数据。

[virtual] QChar QXmlInputSource::next()

返回输入源的下一个字符。如果该函数到达可用数据的终点,则返回 QXmlInputSource::EndOfData。如果在此之后调用 next(),它将尝试通过调用fetchData() 获取更多数据。如果调用fetchData() 得到新数据,该函数将返回该数据的第一个字符;否则将返回 QXmlInputSource::EndOfDocument。

如果该函数返回 QXmlInputSource::EndOfDocument,阅读器(如QXmlSimpleReader )就会认为 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 将通过正确的文本编解码器传递。

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